2015-09-29 60 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}] 
}