【问题标题】:JSON to Java conversion using GSON throws error使用 GSON 将 JSON 转换为 Java 会引发错误
【发布时间】:2016-04-17 02:14:52
【问题描述】:

在我的 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"
    }
  ]
}

【问题讨论】:

  • “第 1 行第 2 列输入结束” 听起来您的字符串实际上只是 {,而不是您显示的整个 JSON。 调试您的代码以确认正在解析的值。
  • 你的 DocId 类属性也应该有 @SerializedName 注释来匹配 JSON
  • 你好丹尼尔,我的内部 json 在课堂上匹配。这就是输入 json 的样子。 { "key": "01key", "eventFields": [ { "DocId": "abc12", "cType": "dummyContent", "events": "dummyEvents" } } }
  • @Andreas,我不确定你的建议。我看到了我的输入文件,它是 { "key":"Value", "eventFields":[ { "DocId":"dummy1","cType":"dummyC","events":"dummyE"},{ .......},{.........}]}
  • @user2844511 您的文件可能有该内容,但是当您调用fromJson() 时,t 的值是多少?

标签: java apache-spark gson unmarshalling android


【解决方案1】:

所以我发现了这个问题,在存储我的响应之前,我正在做漂亮的打印,所以 json 中断为多行,在读取这个 json 时,我假设每一行都是完整的 json,所以我得到了错误。我删除了 prettyprint,我的代码开始正常工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多