2014-02-27 93 views
0

我有一个文件名test.json添加值的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

你的字符串结束了作为

"sEcho":"1","iTotalRecords":"97","iTotalDisplayRecords":"9", 

这不是有效的JSON。为了使它成为有效的JSON,它需要位于{}

但是,我的建议是避免自己创建json。

而不是实际编辑一个json字符串,这通常很棘手,我建议创建一个匹配输入格式的java类和一个匹配输出格式的java类。

创建输入类的有一个实例:

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字符串,并且在处理的变化更好。您的输出也保证始终处于相同的格式。如果输入文件改变格式,你的输出可能没有正确设置所有的值,但至少结构将会在那里,这将有助于防止任何消耗你输出的变化。