Java 使用GSON';s JsonReader,您能将对象转储到字符串吗?

Java 使用GSON';s JsonReader,您能将对象转储到字符串吗?,java,json,gson,Java,Json,Gson,我在Java中使用GSON库处理一个巨大的JSON文档 我绝对无法将其加载到内存中,它的容量超过8G,如果我尝试加载,就会导致JVM崩溃,并出现OOM 因此,我使用JsonReader来处理JSON流 有时,当我到达一个BEGIN\u对象时,我只想将对象的内容转储到字符串中,而不是处理每个单独的元素 例如,我正在解析如下内容: [ { "SchemaVersion":"15.0.0.0","LibraryVersion":"16.0.7324.1200","ErrorInfo":{ "Error

我在Java中使用GSON库处理一个巨大的JSON文档

我绝对无法将其加载到内存中,它的容量超过8G,如果我尝试加载,就会导致JVM崩溃,并出现OOM

因此,我使用
JsonReader
来处理JSON流

有时,当我到达一个
BEGIN\u对象时,我只想将对象的内容转储到字符串中,而不是处理每个单独的元素

例如,我正在解析如下内容:

[ { "SchemaVersion":"15.0.0.0","LibraryVersion":"16.0.7324.1200","ErrorInfo":{ "ErrorMessage":"Access denied. You do not have permission to perform this action or access this resource.","ErrorValue":null,"TraceCorrelationId":"03ab459e-7076-5000-c1a7-196f1fc54384","ErrorCode":-2147024891,"ErrorTypeName":"System.UnauthorizedAccessException" },"TraceCorrelationId":"03ab459e-7076-5000-c1a7-196f1fc54384" } ]
当我转到
ErrorInfo
时,我只希望它是一个字符串,而不是解析出来的。我不想分析每一个片段

下面是代码:

try (InputStream is = (InputStream)response.getEntity();
           InputStreamReader inputStreamReader = new InputStreamReader(is);
           JsonReader jsonReader = new JsonReader(inputStreamReader)) {
        if (jsonReader.peek() != JsonToken.BEGIN_ARRAY) {
          return;
        }
        jsonReader.beginArray();
        while (jsonReader.hasNext()) {
          jsonReader.beginObject(); // Start of the default object on every request

          jsonReader.skipValue(); // name SchemaVersion
          jsonReader.skipValue(); // value
          jsonReader.skipValue(); // name LibraryVersion
          jsonReader.skipValue(); // value
          jsonReader.skipValue(); // name ErrorInfo
          if (jsonReader.peek() == JsonToken.BEGIN_OBJECT) {
            // I want to dump the upcoming object to string here
...

是否可以转储给定begin对象的json读取器的内容,直到其结束为字符串

类似的问题,但不完全相同:

特别感谢您在评论中给出的答案。对于这种情况,您可以使用
Gson.fromJson(jsonReader,Map.class)

Gson gson = new Gson();
try (InputStream is = (InputStream)response.getEntity();
           InputStreamReader inputStreamReader = new InputStreamReader(is);
           JsonReader jsonReader = new JsonReader(inputStreamReader)) {
        if (jsonReader.peek() != JsonToken.BEGIN_ARRAY) {
          return;
        }
        jsonReader.beginArray();
        while (jsonReader.hasNext()) {
          Map header = gson.fromJson(jsonReader, Map.class);
          if (header.get("ErrorInfo") != null) {
            String errorDump = ((Map)header.get("ErrorInfo")).toString();
            // Now I have the error dump I need but I also 
            // didn't load the entire thing into memory!
...

更多信息:

您是否尝试过Apache Spark读取JSON文件?您的JSON格式似乎正确。请立即尝试!想把它转换成一个答案并得到一些分数吗?我希望你有链接。我已经删除了链接和答案。我把它贴出来作为对你要求的答复。但我被告知要删除它。祝你好运