2013-02-07 39 views
1

我連接到第三方API並獲取長JSON字符串。我只需要一個值,但它位於層次結構的相當深處。有沒有一個簡單的方法來獲得它,而沒有通過整個事情?我看了所有,但沒有看起來容易。從JSON深處獲取值

這裏是我的例子:

"response":{"status":1,"httpStatus":200,"data":{"myDesiredInfo":"someInfo"},"errors":[],"errorMessage":null}} 

我一直在嘗試使用GSON這樣我就可以得到這個BLOB作爲一個JSONObject。我相信有一些簡單的,就像這樣:

jsonObject.get("myDesiredInfo") 

,或在最小的是這樣的:

jsonObject.get("response.data.myDesiredInfo") 

但它似乎並不存在。

那麼有沒有解析器可以讓我做到這一點?

+1

您使用哪種語言來解釋json?的JavaScript,C#等... – Dan

+0

唉唉的Java, 看到這個問題的答案... http://stackoverflow.com/questions/1395551/convert-a-json-string-to-object- in-java – Dan

+0

謝謝,Dan,第一個答案允許我獲得最高級別的值,但沒有真正鑽取到較低級別的值。看起來像我的情況,我可能只是解析這個任何其他的Java字符串。 – Eddy

回答

3

這是我的JSON字符串

String s="{"age":0,"name":"name","email":"emailk","address":{"housename":"villa"}}"; 

我用下面的代碼獲取housename

JsonElement je = new JsonParser().parse(s); 
    JsonObject asJsonObject = je.getAsJsonObject(); 
    JsonElement get = asJsonObject.get("address"); 
    System.out.println(s + "\n" + get); 
    JsonObject asJsonObject1 = get.getAsJsonObject(); 
    JsonElement get1 = asJsonObject1.get("housename"); 
    System.out.println(get1); 

以下是我的輸出:

{"age":0,"name":"name","email":"emailk","address":{"housename":"villa"}} 
{"housename":"villa"} 
"villa" 

我不認爲有另一種方式來做到這一點。我也嘗試以其他方式做,但我沒有得到任何輸出。

+0

是的,這是它。不過,有點令人失望。但如果沒有其他人有更優雅的方式,我會除了這個答案。謝謝,Parvathy! – Eddy

0

大多數語言都有一個JSON解碼庫,其中很多都是原生的。不知道你使用所以這裏的語言是PHP爲例:

$jsonObj = json_decode($json); 
$json->response->data->myDesiredInfo; 

的Ruby,Python和Java的 - 所有這些語言具有良好的庫。

3

您可以從您的jsonObject中檢索以下方法。

JSONObject jObject = new JSONObject(yourresponse); 
Log.i("Desired Info is ",jObject.getJSONObject("response").getJSONObject("data").getString("myDesiredInfo")); 
1

我寫了一個使用GSON的API來從JSON對象獲得的值作爲字符串基於價值觀的一個java.util.List一個小工具的方法。所以對於我原來的問題,列表對象將是「響應」,「數據」,「myDesiredInfo」。

當然這可以改善,但這是一個開始。

/* 
* Takes a JsonObject and parses it for a primitive value, going level by level 
* according to the values in @infos 
*/ 
public static String parseJson(JsonObject json, List<String> infos) { 

    try { 
     if(infos.size() == 0) { 
      return json.toString(); 
     } 

     JsonElement je = json.get((String)infos.get(0)); 
     infos.remove(0); 

     if(je instanceof JsonObject) { 
      return parseJson(je.getAsJsonObject(), infos);   
     } else { 
      return je.getAsString(); 
     }   
    } catch (Exception e) { 
     e.printStackTrace(); 
     return null; 
    } 
} 
+0

我開始爲我的項目編寫一個類似的代碼片段,但是想要檢查在Java中是否有一種優雅的方式。看起來沒有(爲什麼我甚至寫這個評論!! ??)。 – Vikas