JSON 到 Java 使用 GSON 的转换抛出错误

JSON to Java conversion using GSON throws error

在我的 spark 代码中,我有 gson,它存储在字符串 RDD 中,我正在将其转换为键和值。

JavaPairRDD<String, ArrayList<Guid>> docPairRDD = docRDD.mapToPair(SparkCustomFunctions.generateKeyValuePair());

    /**
     * @return new Tuple with key is of type String and value is of type ArrayList<DocId>
     */
    public static PairFunction<String, String, ArrayList<DocId>> generateKeyValuePair() {
        return new PairFunction<String, String, ArrayList<DocId>>(){

        private static final long serialVersionUID = 9086064488812696200L;
        public Tuple2<String, ArrayList<DocId>> call(String t)
                    throws Exception {

            GsonBuilder gson = new GsonBuilder();
            Document tempObj = gson.create().fromJson(t, Document.class);

        return new Tuple2<String, ArrayList<DocId>>(tempObj.getKey(),(ArrayList<DocId>) tempObj.getEventFields());
            }
        };
    }
}

以下是上述函数中使用的类描述

(1).

public class Document implements Serializable {
private static final long serialVersionUID = 1L;
     @SerializedName("key")
    String key;
     @SerializedName("eventFields")
    List<DocId> eventFields= new ArrayList<DocId>();

    public Document (String key, List<DocId> eventFields) {
        super();
        this.key = key;
        this.eventFields= eventFields;
    }

Its setter and getter
}

(2).

public class DocId implements Serializable {
    private static final long serialVersionUID = 1L;
    String DocId = "";
    String cType = "";
    String events;
    public DocId(String docId, String cType, String eType){
        super();
        this.DocId = docId;
        this.cType = cType;
        this.events = eType;
    }
their setters and getters
}

但我收到以下错误 com.google.gson.JsonSyntaxException:java.io.EOFException:第 1 行第 2 列的输入结束 在 com.google.gson.Gson.fromJson(Gson.java:813) 在 com.google.gson.Gson.fromJson(Gson.java:768) 在 com.google.gson.Gson.fromJson(Gson.java:717) 在 com.google.gson.Gson.fromJson(Gson.java:689)

我是 gsona 和 spark 的新手。所以请让我知道我做错了什么?


我正在将以下类型的 json 存储到 RDD

{
  "key": "01key",
  "eventFields": [
    {
      "guid": "abc12",
      "contentType": "dummyContent",
      "events": "dummyEvents"
    }
  ]
}

所以我发现了这个问题,在存储我的回复之前我正在做 prettyprint 所以 json 被分成多行并且在阅读这个 json 时,我假设每一行都是完整的json,所以我得到了错误。我删除了 prettyprint,我的代码开始正常工作。