2010-03-30 38 views
5

Xin chào, tôi muốn tạo một mảng JSON.Làm cách nào để tạo một JSON Array?

Tôi đã cố gắng sử dụng:

JSONArray jArray = new JSONArray(); 
    while(itr.hasNext()){ 
    int objId = itr.next(); 
jArray.put(objId, odao.getObjectName(objId)); 
    } 
results = jArray.toString(); 

Lưu ý: odao.getObjectName(objId) lấy một tên dựa trên "Id đối tượng" được gọi là objId.

Tuy nhiên tôi nhận được một mảng trông rất buồn cười như

[null,null,null,"SomeValue",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"AnotherValue",null,null,null,null,null,null,null,null,null,null,"SomethingElse","AnotherOne","LastOne"] 

Với chỉ "LastOne" được hiển thị khi tôi lấy nó bằng cách sử jQuery.

Array sẽ giống như

{[ "3": "someValue"], [ "40": "anotherValue"], [ "23": "SomethingElse"], [ "9" : "AnotherOne"], ["1": "LastOne"]}

Các con số này không hiển thị vì lý do nào đó trong mảng mà tôi nhận được.

+0

Bạn có đối tượng JSON của mảng JSON? –

+1

Bất cứ điều gì bạn nhận được, nó sẽ không giống như thế. Mảng là [foo, bar, baz] trong khi các đối tượng là {"foo": "value", "bar": "value", "baz": "value"}. Dường như bạn có {} và [] bối rối. – Quentin

+1

Cảm ơn tất cả mọi người, tôi có một cái gì đó từ mỗi câu trả lời.Cuối cùng tôi nhận ra câu hỏi của tôi không được thể hiện chính xác như nó đáng lẽ phải có, nhưng câu trả lời của bạn đã giải quyết được vấn đề của tôi. – Ankur

Trả lời

12

Đối với giải pháp nhanh chóng của bạn:

JSONArray jArray = new JSONArray(); 
while (itr.hasNext()) { 
    JSONObject json = new JSONObject(); 
    int objId = itr.next(); 
    json.put(Integer.toString(objId), odao.getObjectName(objId)); 
    jArray.put(json); 
} 

results = jArray.toString(); 

Dựa trên T. J. Crowder's response, giải pháp của tôi thực hiện điều này:

[{"3":"SomeValue"}, 
{"40":"AnotherValue"}, 
{"23":"SomethingElse"}, 
{"9":"AnotherOne"}, 
{"1":"LastOne"} 
] 

Tham khảo ý kiến ​​của những gì bạn đang làm sai Jim Blackler của.

+0

cảm ơn, bạn đã lưu ngày của tôi. –

8

Các đầu mối là trong tài liệu cho JSONArray cho phương pháp đặt (int index, String value)

Nếu chỉ số này lớn hơn chiều dài của JSONArray, sau đó yếu tố null sẽ được thêm nếu cần thiết để pad nó ra.

+0

Tôi thấy chỉ số theo nghĩa đen là chỉ mục của Mảng và không phải là một số giá trị mà tôi có thể gán. – Ankur

+0

@Ankur: Vâng, đó là một mảng trong ý nghĩa số-chỉ mục mảng, không phải là bản đồ (còn gọi là từ điển hay còn gọi là mảng kết hợp). Bạn có thể sử dụng JSONObject (http://www.json.org/javadoc/org/json/JSONObject.html) cho bản đồ; các khóa trong các đối tượng JSON luôn là các chuỗi, vì vậy bạn sẽ cần phải tạo một chuỗi từ 'objId' của bạn, nhưng điều đó là đủ dễ dàng. –

2

Những gì bạn đã trích dẫn cho "Đối tượng của bạn trông giống như" là JSON không hợp lệ. Đó là một đối tượng (được giới hạn bởi {}) nhưng sau đó nó có các giá trị bên trong nó mà không có bất kỳ khóa nào. Xem json.org để biết cú pháp JSON.

Nếu bạn muốn điều này:

{"3":"SomeValue", 
"40":"AnotherValue", 
"23":"SomethingElse", 
"9":"AnotherOne", 
"1":"LastOne" 
} 

... sử dụng JSONObject thay vào đó, và biến objId của bạn vào phím khi đặt các mục trong, ví dụ:

JSONObject obj = new JSONObject(); 
while(itr.hasNext()){ 
    int objId = itr.next(); 
    obj.put(String.valueOf(objId), odao.getObjectName(objId)); 
} 
results = obj.toString(); 

Nếu bạn muốn điều này:

[{"3":"SomeValue"}, 
{"40":"AnotherValue"}, 
{"23":"SomethingElse"}, 
{"9":"AnotherOne"}, 
{"1":"LastOne"} 
] 

... xem The Elite Gentleman's answer (đó là JSONArray của JS ONObjects).

+1

Cho đến khi chúng tôi biết những gì anh/cô ấy thực sự muốn, mỗi câu trả lời ở đây là chính xác. –

+1

@Elite: Thật vậy. –

+1

@ The Elite Gentleman: Đó là một anh ấy :) – Ankur

Các vấn đề liên quan