2013-08-05 194 views
3

我正在使用一個函數來將列表項,名稱,id添加到jsonobject中,並將該對象返回到調用的函數中,並獲得所有的方式。但是我對解析該json字符串有點困惑。Json對象包含json數組解析

JSONObject obj = abcobj.function(); 

public JSONObject function() 
{ 
    jsonobj.put("test",list); 
    jsonobj.put("name",name); 
    jsonobj.put("id",id); 
    return jsonobj; 
} 

System.out.println("Json object"+devid); 

輸出

{"test":["test","test1"],"name":"xxxxx","id":"1234"} 

請幫我解析這個對象

+0

你想使用Java來分析呢? – fiskeben

回答

0

你到底想分析?例如,如果您想要訪問test1內部的數據,您需要檢索test [1],然後從那裏獲取數據。如果你想知道爲什麼你在列表中看到對象的名字,我猜測你有一個toString,在那裏你只顯示對象的名字,在你要添加到該列表的類中。

另一件需要注意的是,你在輸出中顯示給我們的json是無效的json。或者說,它有兩個同名的字段,這是不推薦的,因爲一個對象只能有一個同名的字段。

你能發佈你用於創建和解析json的所有代碼嗎?另外,你有沒有考慮過使用GSON?來自Google的一個非常簡單而強大的JSON庫。

0

我假設你想將interestKeys存儲在列表中。

使用org.json庫:

JSONObject obj = new JSONObject("{interests : [{interestKey:Dogs},{interestKey:Cats}]}"); 

List<String> list = new ArrayList<String>(); 
JSONArray array = obj.getJSONArray("interests"); 
for(int i = 0 ; i < array.length() ; i++){ 
    list.add(array.getJSONObject(i).getString("interestKey")); 
} 
0

我想你可以使用下列方法之一:

第一招:定義域對象和使用框架,以「反序列化」串到該對象。 GSON /傑克遜應該爲你在這裏工作

例子:

public class MyObject { 
    String [] test; 
    String name; // the second name in example is wrong json 
} 

現在使用GSON這樣的:

MyObject obj = new Gson().fromJson(yourStringComesHere, MyObject.class); 
obj.name 

當然,你應該提供的getter /私有訪問的數據字段中爲MyObject類,但這很好的解釋了這個想法。

另外,您可以跟上的JSONObject的工作,它應該有干將,是這樣的:

的JSONObject的JSONObject = getObjectSomehow(); jsonObject.get(「name」);

希望這有助於

2

如果您使用的是org.json. Java解析器,這裏是如何做到這一點:

String jsonData = "{\"test\":[\"test\",\"test1\"],\"name\":\"xxxxx\",\"id\":\"1234\"}"; 

JSONObject jsonRoot = new JSONObject(jsonData); 

List<String> list = new ArrayList<String>();  
JSONArray jsonList = jsonRoot.getJSONArray("test"); 
for (int i = 0; i < jsonList.length(); i++) { 
    list.add(jsonList.getString(i)); 
} 

String name = jsonRoot.getString("name"); 
Integer id = Integer.valueOf(jsonRoot.getInt("id")); 
+0

其工作完美...謝謝你拉維 –

+0

@AravindCheekkallur很高興幫助。請考慮接受答案。謝謝。 –

3

創建的JSONObject類的一個實例,並通過每個JSON項目,最後用for循環將每個json數據存儲在變量中。

JSONObject jsonRoot = new JSONObject(jsonData); 
    List<String> list = new ArrayList<String>();  
    JSONArray jsonList = jsonRoot.getJSONArray("test"); 
for (int i = 0; i < jsonList.length(); i++) { 
      list.add(jsonList.getString(i)); 
    } 
String str_name = jsonRoot.getString("name"); 
Integer str_id = Integer.valueOf(jsonRoot.getInt("id")); 

希望這會幫助你。

0
Object s=devid.get("test"); 
ArrayList<String> d=new ArrayList<>(); 
d=(ArrayList<String>) s; 
for(Object i: d) 
    { 
    System.out.println(i); 
    } 

    System.out.println(obj.get("name")); 
    System.out.println(obj.get("id")); 
*output* 

test 
test1 
xxxxx 
1234 
0

您可以使用下面的代碼來解析JSON:

import com.google.gson.Gson; 
import com.google.gson.reflect.TypeToken; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

    Map<String,Object> map = new HashMap<String,Object>(); 
    ArrayList<String> testList = new ArrayList<String>(); 
    String jsonString; 
    Gson gson = new Gson(); 

try { 
     jsonString = "{"test":["test","test1"],"name":"xxxxx","id":"1234"}"; 
     map = (Map<String,Object>) gson.fromJson(jsonString, map.getClass()); 
     testList = (ArrayList<String>) map.get("test"); 
} 
catch (Exception e) { 


}