将值添加到json元素

时间:2014-02-27 01:45:17

标签: gson

我有一个文件名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数组。

1 个答案:

答案 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字符串,并且更好地处理更改。您的输出也保证始终采用相同的格式。如果输入文件更改了格式,您的输出可能没有正确设置所有值,但至少结构将有助于防止在消耗输出的任何内容中发生更改。