无法解析获得com.google.gson.stream.MalformedJsonException的JSON:未终止的对象

时间:2015-07-09 05:48:36

标签: java json

我的json

1. {"distinctvalue":"-1","classLabel":[{"key":"-1","value":0},{"key":"\u003e4.0","value":3}],"total":3}
2. {"distinctvalue":"1","classLabel":[{"key":"\u003c\u003d4.0","value":1},{"key":"1","value":0}],"total":1}

我想提取" classLabel"。所以我有一个POJO类

public class AttrClsJson {
/**
 * @param args
 */
 String key;
 int value;

代码

for (int i = 0; i < arr.size(); i++) {
     System.out.println("arr.get(i).toString()---------->"+arr.get(i).toString());
     AttrClsJson clsInfo = gson.fromJson(arr.get(i).toString().trim(), AttrClsJson.class);
     int val = clsInfo.getValue();
     System.out.println("val--- "+val);
}

对于第一个json,我能够从&#34; classLabel&#34;

获取密钥和值
1. arr.get(i).toString()---------->{key=-1, value=0.0}
val--- 0
arr.get(i).toString()---------->{key=>4.0, value=3.0}
val--- 3
2.
arr.get(i).toString()---------->{key=<=4.0, value=1.0}

对于上面的字符串,我无法获得该值。

"AttrClsJson clsInfo = gson.fromJson(arr.get(i).toString().trim(), AttrClsJson.class);"

中出现错误
com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Unterminated object at line 1 column 8
    at com.google.gson.Gson.fromJson(Gson.java:818)
    at com.google.gson.Gson.fromJson(Gson.java:768)
    at com.google.gson.Gson.fromJson(Gson.java:717)
    at com.google.gson.Gson.fromJson(Gson.java:689)

我做错了吗? 请建议。

修改

{key =&lt; = lt = = 4.0,value = 1.0}

当我检查时当key包含&#34;&lt; =&#34;时未检索到该值,对于所有其他人,我能够获得该值。

2 个答案:

答案 0 :(得分:1)

看起来你解析的次数太多了。你可能不得不解析JSON字符串以获得arr。你正在解析arr的内容,但它已被解析,不再是JSON字符串。

答案 1 :(得分:0)

在字符串中的每个特殊字符前添加反斜杠。

实施例。 String =&#34; [{\&#34; key \&#34;:\&#34; \ u003e4.0 \&#34;,\&#34; value \&#34;:3}] &#34 ;;