2014-02-27 92 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字符串,並且在處理的變化更好。您的輸出也保證始終處於相同的格式。如果輸入文件改變格式,你的輸出可能沒有正確設置所有的值,但至少結構將會在那裏,這將有助於防止任何消耗你輸出的變化。