2015-09-29 92 views
0

我有ArrayList中,需要轉換成JSON數組服務器發佈轉換數組列表對象jsonarray

JSON格式應該是這樣的:

{ 
    p:1, 
    s:["a":1,"b":2],["a":2,"b":3],["a":3,"b":4] 
} 

讓說我有:

List<MyObject> objectList = new ArrayList<MyObject>(); 
MyObject myObject = new MyObject(); 
myObject .setA(1); 
myObject .setB(2); 

myObject .setA(2); 
myObject .setB(3); 

myObject .setA(3); 
myObject .setB(4); 

objectList.add(myObject); 

我當前的代碼是:

for (int i = 0; i < objectList.size(); i++) { 
     JSONArray ar = new JSONArray(); 
     ar.put("a:"+objectList.get(i).getA()); 
     ar.put("b:"+objectList.get(i).getB()); 

     jOuter.put("s",ar); 
    } 

但這並不工作,目前的回報是:

{"p":1,"s":["a:20","b:10.0"]} 

感謝。

+0

這JSON告訴你是遠離有效。鍵必須是字符串,值可以是列表'[]',但列表不能包含鍵值對,那些在對象'{}' –

+0

@Cris你可以看看Gson庫.. –

+0

你正在把'JSONArray'一個'字符串',而你應該把'JSONObject' – user902383

回答

2

難道不是這樣的嗎?

JSONArray ar = new JSONArray(); 
for (int i = 0; i < objectList.size(); i++) { 

     JSONObject objects = new JSONObject(); 
     objects.put("a", objectlist.get(i).getA(); 
     objects.put("b", objectlist.get(i).getB(); 

     ar.put(objects); 

    } 
     jOuter.put("s",ar); 
+0

編輯:刪除_id從getA_id() – Cris

+0

返回是{「p」:1,「s」:[{「a」:1,「b」:2},{}]} – Cris

+0

有人已經做到了:JSON數組必須在for循環之外 – Prexx

1

您的所需要的格式無效。 我認爲你正在尋找這樣的事情

{ 
    "p": 1, 
    "s": [ 
    { 
     "a": 1, 
     "b": 2 
    }, 
    { 
     "a": 2, 
     "b": 3 
    }, 
    { 
     "a": 3, 
     "b": 4 
    } 
    ] 
} 

爲使該代碼就會像下面

JSONArray jArray = new JSONArray(); 
for (int i = 0; i < objectList.size(); i++) { 
     JSONObject job= new JSONObject(); 
     job.put("a",objectList.get(i).getA()); 
     job.put("b",objectList.get(i).getB()); 

     jArray .put(job); 
} 

try { 
     jOuter.put("s", jArray); 
} catch (JSONException e) { 
     e.printStackTrace(); 
} 
1

請檢查下面的代碼:這將作出適當的格式:

JSONObject jo = new JSONObject(); 
    try { 
     jo.put("p", "1"); 

     JSONArray jarr = new JSONArray(); 
     for (MyObject listItem : objectList) { 
      JSONObject inner = new JSONObject(); 
      inner.put("a", listItem.getA()); 
      inner.put("b", listItem.getB()); 

      jarr.put(inner); 
     } 
     jo.put("s", jarr); 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

它會返回如下輸出:

{ 
    "p":1, 
    "s":[{"a":1,"b":2},{"a":2,"b":3},{"a":3,"b":4}] 
} 

這使得一個正確的JSON,我認爲你需要!請讓我知道,如果我在某個地方錯了。

1

您的s條目實際上是JsonArray,而您的p只是一個屬性。這裏我使用的是Gson,但您可以輕鬆將其應用於您正在使用的任何庫。所以,你可以做到以下幾點:

JsonObject jObj = new JsonObject(); 
jObj.addProperty("p", 1); 

JsonArray sArr = new JsonArray(); 

for (int i = 0; i < objectList.size(); i++) 
{ 
     JsonObject innerObj = new JsonObject(); 
     innerObj.addProperty("a:"+objectList.get(i).getA()); 
     innerObj.addProperty("b:"+objectList.get(i).getB()); 

     sArr.add(innerObj); 
} 

jObj.addProperty("s", sArr); 

輸出是:

{ 
    "p":1, 
    "s":[{"a":1,"b":2},{"a":3,"b":4}] 
}