2013-06-12 94 views
1
{ 
    "files": { 
     "f1.png": { 
      "intext": "A", 
      "inval": 0, 
      "inbinary": false 
     }, 
     "f2.png": { 
      "intext": "A", 
      "inval": 0, 
      "inbinary": true 
     } 
    } 
} 

如何在f1.png值不固定時訪問inval的值。即文件的名稱可以是任何東西,它不知道,所以我怎樣才能使用Java在這個JSON中的各種文件訪問值爲inval字段?使用java訪問嵌套的JSON對象值

+0

您確定您的意思是Java? – NimChimpsky

+1

有JSON庫可以做到這一點。 – NINCOMPOOP

回答

1

請嘗試以下代碼,

import org.json.JSONException; 
import org.json.JSONObject; 
public static void main(String[] args) { 
     String jsonString = "{\"files\": {\"f1.png\": {\"intext\": \"A\",\"inval\": 0,\"inbinary\": false}, \"f2.png\": {\"intext\": \"A\",\"inval\": 0,\"inbinary\": true}}}"; 
     try { 
      JSONObject jsonObject =new JSONObject(jsonString); 
      JSONObject jsonChildObject = (JSONObject)jsonObject.get("files"); 
      Iterator iterator = jsonChildObject.keys(); 
      String key = null; 
      while(iterator.hasNext()){ 
       key = (String)iterator.next(); 
       System.out.println("inval value: "+((JSONObject)jsonChildObject.get(key)).get("inval")); 
      } 
     } 
     catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

希望它能解決您的問題

+0

它對我很好。謝謝 :) – user2436651

0

使用JacksonJsonNode,你會怎麼做:

private static final ObjectReader READER = new ObjectMapper() 
    .getReader; 

// blah 

// read the node 
final JsonNode node = READER.readTree(fromWhatever); 

// access the inner "files" member 
final JsonNode filesNode = node.get("files"); 

訪問內部對象。

然後走filesNode對象,你會怎麼做:

final Iterator<Map.Entry<String, JsonNode>> iterator = filesNode.fields(); 
Map.Entry<String, JsonNode> entry; 
while (iterator.hasNext()) { 
    entry = iterator.next(); 
    // the "inval" field is entry.getValue().get("inval") 
} 

如果你可以使用這個this project變得更加簡單:

// or .fromFile(), .fromReader(), others 
final JsonNode node = JsonLoader.fromString(whatever); 

final Map<String, JsonNode> map = JacksonUtils.nodeToMap(node.get("files")); 
// walk the map 
0

嵌套陣列型,

{ 
"combo": [ 
       {"field":"divisions"}, 
       {"field":"lob"} 
] 

} 下面的代碼會有所幫助。

Iterator<?> keys = jsnObj.keys(); 

    while(keys.hasNext()) { 
     String key = (String) keys.next(); 
     JSONArray list = (JSONArray) jsnObj.get(key); 
     if(list==null || list.length()==0) 
      return null; 
     List<String> comboList = new ArrayList<String>(); 
     for(int i=0;i<list.length();i++){ 
      JSONObject jsonObject = (JSONObject)list.get(i); 
      if(jsonObject==null) 
       continue; 
      comboList.add((String)jsonObject.get("fields")); 
     } 
    }