Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
高效地使用JSON流(在Java中)_Java_Json - Fatal编程技术网

高效地使用JSON流(在Java中)

高效地使用JSON流(在Java中),java,json,Java,Json,我一直在使用和,但理想情况下,我正在寻找一个混合:) 特别是,给定一个JSON对象流(任意长的JSON数组的一部分),是否有一个助手/库每次生成“JSONObject”(迭代器样式),而不是读取或解析单个基元字段(JsonReader)中的所有内容 假设API示例: JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8")); reader.beginArray(); while (reader.hasNext(

我一直在使用和,但理想情况下,我正在寻找一个混合:)

特别是,给定一个JSON对象流(任意长的JSON数组的一部分),是否有一个助手/库每次生成“JSONObject”(迭代器样式),而不是读取或解析单个基元字段(JsonReader)中的所有内容

假设API示例:

JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));

reader.beginArray();
while (reader.hasNext()) 
{
  JSONObject obj = reader.readObject();
  // do something with 'obj'
}
reader.endArray();
上面,调用readObject解析一些复杂的JSON子树,并将其作为JSONObject返回。

这里有一个例子

打印JSON的示例如下:

import javax.json.Json;
import javax.json.stream.JsonParser;
...
JsonParser parser = Json.createParser(new StringReader(jsonData));
while (parser.hasNext()) {
   JsonParser.Event event = parser.next();
   switch(event) {
      case START_ARRAY:
      case END_ARRAY:
      case START_OBJECT:
      case END_OBJECT:
      case VALUE_FALSE:
      case VALUE_NULL:
      case VALUE_TRUE:
         System.out.println(event.toString());
         break;
      case KEY_NAME:
         System.out.print(event.toString() + " " +
                          parser.getString() + " - ");
         break;
      case VALUE_STRING:
      case VALUE_NUMBER:
         System.out.println(event.toString() + " " +
                            parser.getString());
         break;
   }
}

从。它是JavaEE7API的一部分,但是可以从中获得独立的jar。

可能的重复项不适用。JSONArray可能太大,无法立即存储在内存中。我希望每次通过JSONObject读取任意长度的数组。理想情况下,API会在readObject中阻塞,直到返回数组的JSONObject元素为止。有一些增量JSON读取器(类似于更流行的增量XML读取器),但它们非常少见,使用起来也很笨拙。处理JSON的自然方式是将其作为一棵树,但如果树的左侧仍埋在地下,则无法很好地处理JSON。您解决过这个问题吗?我也必须这样做,但找不到任何库来为我处理这个问题。对不起,我在阅读器上编写了自己的堆栈。现在是Apache的一部分。请参阅Github上的和。找到了1.1.4的jar:和。