[英]Parse JSON object to string in java
我是json解析的新手,我從請求中獲取了一個json字符串,現在我需要使用java解析它。 我為此使用simple-lib。 但是由於我不熟悉它,所以我真的很困。 我需要提取以下數據
我為此使用了以下Java代碼,但它沒有給我所需的結果,請有人幫助我...
JSONParser parser = new JSONParser();
try {
Object obj = parser.parse(new FileReader("test.json"));
JSONObject jsonObject = (JSONObject) obj;
JSONArray msg = (JSONArray) jsonObject.get("content");
Iterator<String> iterator = msg.iterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
樣本JSON
{
"status": 200,
"message": "ok",
"timestamp": "2014-05-22T14:29:56.824+03:00",
"pagesCount": 1,
"version": "1.1",
"pages": [
{
"number": 100,
"subpages": [
{
"number": 1,
"timestamp": "2014-05-22T13:41:41.116+03:00",
"content": "text"
},
大概是這樣嗎?
JSONParser parser = new JSONParser();
JSONObject jsonObject = (JSONObject) parser.parse(new FileReader("test.json"));
JSONArray pages = (JSONArray) jsonObject.get("pages");
if (pages != null) {
for (Object p : pages) {
JSONObject page = (JSONObject) p;
JSONArray subPages = (JSONArray) page.get("subpages");
if (subPages != null) {
for (Object sp : subPages) {
JSONObject subPage = (JSONObject) sp;
System.err.println(subPage.get("content"));
}
}
}
}
您正在從最外面的對象請求與鍵content
相對應的值,但樣本輸入中不存在這樣的鍵。 此外,唯一的名為content
字段將字符串作為其值,而不是JSON數組。
要到達content
字段,您需要使用以下幾行代碼來遍歷對象層次結構,直到到達所需的元素:
JSONParser parser = new JSONParser();
JSONObject json = (JSONObject) parser.parse(new FileReader("test.json"));
JSONArray pages = (JSONArray) json.get("pages");
// Page 10
JSONObject page = (JSONObject) pages.get(10);
// Subpages of page 10
JSONArray subpages = (JSONArray) page.get("subpages");
// Subpage 7 of page 10
JSONObject subpage = (JSONObject) subpages.get(10);
// Content of subpage 7 of page 10
String content = (String) subpage.get("content");
請注意,我假設索引10對應於第10頁。 頁面可能沒有被零索引,頁面可能丟失或順序不正確。 在這種情況下,您將必須遍歷頁面和子頁面列表,並測試number
字段的值以找到所需的對象。
無論如何,如果確實使用json-simple ,那么JSONObject
是HashMap
的子類,而JSONArray
是ArrayList
的子類。 因此,您對它們的界面應該非常熟悉。
免責聲明:未經測試的代碼-為簡潔起見,刪除了異常和其他錯誤處理
首先,json無效(如果粘貼完整),在JSON中,“ {}”是一個對象,“ []”是一個數組,其他只是鍵值對。 簡而言之,您無需使用解析器就可以這樣做,
JSONObject objResponseJSON = new JSONObject(responseJSONString);
int status = (int) objResponseJSON.getInt("status");
//fetch other
JSONArray pages = objResponseJSON.getJSONArray("pages");
for(int count = 0; count < pages.length(); count++){
//fetch other
JSONObject objJSON = pages.getJSONObject(count);
JSONArray subpages = objJSON.getJSONArray("subpages");
for(int count1 = 0; count1 < subpages.length(); count1++){
JSONObject objSubpageJSON = subpages.getJSONObject(count1);
//fetch other
int number = (int) objSubpageJSON.getInt("number");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.