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,我的代码开始正常工作。
在我的 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,我的代码开始正常工作。