我有一个文件名test.json
{ "aaData":
[
{
"engine": "Trident",
"browser": "Internet Explorer 4.0",
"platform": "Win 95+",
"version": "4",
"grade": "X"
},
{
"engine": "Trident",
"browser": "Internet Explorer 5.0",
"platform": "Win 95+",
"version": "5",
"grade": "C"
}
]
}
我读了这个文件,我想得到这个
{ "sEcho":"1",
"iTotalRecords":97,
"iTotalDisplayRecords":9,
"aaData":
[
{
"engine": "Trident",
"browser": "Internet Explorer 4.0",
"platform": "Win 95+",
"version": "4",
"grade": "X"
},
{
"engine": "Trident",
"browser": "Internet Explorer 5.0",
"platform": "Win 95+",
"version": "5",
"grade": "C"
}
]
}
我的代码阅读和构建
JsonParser parser = new JsonParser();
FileReader fr = new FileReader("web.json");
JsonElement element = parser.parse(fr);
StringBuilder sb = new StringBuilder();
sb.append("\"sEcho\":\"1\",");
sb.append("\"iTotalRecords\":\"97\",");
sb.append("\"iTotalDisplayRecords\":\"9\",");
Gson gson = new Gson();
JsonElement data = gson.fromJson(sb.toString(), JsonElement.class);
data.getAsJsonArray().add(element);
从JSon开始,我得到了
com.google.gson.stream.MalformedJsonException:使用JsonReader.setLenient(true)接受格式错误的JSON
我的字符串不正常?
我试过
Gson gson = new Gson();
JsonReader reader = new JsonReader(new StringReader(sb.toString()));
reader.setLenient(true);
JsonElement element = gson.fromJson(reader, JsonElement.class);
element.getAsJsonArray().add(data);
我得到这不是JSON数组。
答案 0 :(得分:1)
你的字符串最终为
"sEcho":"1","iTotalRecords":"97","iTotalDisplayRecords":"9",
这不是有效的JSON。要使它成为有效的JSON,它需要在{}
中但是,我的建议是避免让json自己建立。
我建议创建一个匹配输入格式的java类,以及一个匹配输出格式的java类,而不是实际编辑一个通常很棘手的json字符串。
使用以下命令创建输入类的实例:
InputClass i = gson.fromJson(inputString, InputClass.class)
然后正常创建输出类的实例。
OutputClass o = new OutputClass();
o.sEcho = 1;
o.iTotalRecords= 97;
o.iTotalDisplayRecords = 9;
o.aaData = i;
最后将输出渲染回json
String result = gson.toJson(o);
这看起来似乎只是附加到字符串,但它保证生成有效的JSON字符串,并且更好地处理更改。您的输出也保证始终采用相同的格式。如果输入文件更改了格式,您的输出可能没有正确设置所有值,但至少结构将有助于防止在消耗输出的任何内容中发生更改。