2012-07-20 16 views
5

Ho dati come questo:creando stringa JSON utilizzando JSONObject e JSONArray

NewsItem:

  • id
  • titolo
  • data
  • txt

Ci possono essere molti NewsItem dicono 10. Devo mandarli a jquery.

sto facendo questo:

JSONObject obj = new JSONObject(); 
JSONArray arr = new JSONArray(); 

for(int i = 0 ; i< list.size() ; i++){ 
    p = list.get(i); 
    arr.put(p.getId()); 
    arr.put(p.getTitle()); 
    arr.put(new MyDateFormatter().getStringFromDateDifference(p.getCreationDate())); 
    arr.put(getTrimmedText(p.getText())); 
    obj.put(""+i,arr); 
    arr = new JSONArray(); 
} 

Questo creerà una stringa JSON come questo: {"1":["id","title","date","txt"],"2":[......and so on...

E 'corretto modo di fare questo?

Come posso analizzare questa stringa in modo che sia possibile ottenere ogni oggetto di news in jQuery in modo che possa accedere a attr.

Ti piace questa:

obj.id, 
obj.title 

Oppure, se questo è il modo sbagliato di creare stringa JSON, si prega di suggerire un modo migliore con esempio di parsing in jQuery.

+2

downvoter: qui è una zona di commento per voi .... – JAVAGeek

risposta

14

I credo che stai organizzando i tuoi dati al contrario. Sembra che si desidera utilizzare una serie di NewsItems, e se è così, allora il tuo codice di generazione JSON Java dovrebbe essere simile a questo:

JSONObject obj = new JSONObject(); 
JSONArray arr = new JSONArray(); 

for(int i = 0 ; i< list.size() ; i++) 
{ 
    p = list.get(i); 

    obj.put("id", p.getId()); 
    obj.put("title", p.getTitle()); 
    obj.put("date". new MyDateFormatter().getStringFromDateDifference(p.getCreationDate())); 
    obj.put("txt", getTrimmedText(p.getText())); 

    arr.put(obj); 

    obj = new JSONObject(); 
} 

Ora la stringa JSON sarà simile a questa:

[{"id": "someId", "title": "someTitle", "date": "dateString", "txt": "someTxt"}, 
{"id": "someOtherId", "title": "someOtherTitle", "date": "anotherDateString", "txt": "someOtherTxt"}, 
...] 

Supponendo che i tuoi gettiti di NewsItem restituiscano Strings. Il metodo JSONObject put è sovraccarico anche per i tipi primitivi, quindi se, ad es. il tuo getId restituisce un int, quindi verrà aggiunto come JSON nudo int. Suppongo che JSONObject.put(String, Object) chiami il numero toString sul valore, ma non posso verificarlo.

Ora in javascript, è possibile utilizzare un tale stringa direttamente:

var arr = 
    [{"id": "someId", "title": "someTitle", "date": "dateString", "txt": "someTxt"}, 
    {"id": "someOtherId", "title": "someOtherTitle", "date": "anotherDateString", "txt": "someOtherTxt"}]; 

for (i = 0; i < arr.length; i++) 
    alert(arr[i].title); // should show you an alert box with each first title 
+0

come posso attraversare ogni oggetto in un loop .... arr [0] .. arr [1] sarebbe ok ma se non so il numero di elementi allora come posso accedervi ??? – JAVAGeek

+0

@JAVAGeek: gli array javascript hanno una proprietà 'length', vedi modifica – pb2q

+0

Grazie !! penso che questo è esattamente quello che stavo cercando .. – JAVAGeek

0

Per la conversione oggetto JSON per JSON uso stringa

JSON.stringify(json_object) 

Per uso inverso:

JSON.parse(json_string) 
+0

Se stai usando JSON-semplice è possibile utilizzare toJSONString() metodo – sergiofbsilva

0

Questo è il modo corretto -

final JSONArray arr = new JSONArray(); 

for(int i = 0 ; i< list.size() ; i++) { 
    final JSONObject obj = new JSONObject(); 
    p = list.get(i); 
    obj.add("id", p.getId()); 
    obj.add("title", p.getTitle()); 
    obj.add("date", new MyDateFormatter().getStringFromDateDifference(p.getCreationDate())); 
    obj.add("txt", getTrimmedText(p.getText())); 
    arr.add(obj); 
} 

Questo genererà

[{"id": 1, "date": 222, "title": "abc", "txt": "some text"}, {...}]

Ora, quando si analizza il JSON alla fine client, è possibile iterare l'array e per ogni oggetto JSON è possibile accedere come -

obj.id o obj["id"]

+0

non è obj.add ("", "") ;, è obj.put ("", ""); Lista – TechFind

+0

? ho 2 corde. – user151968

1

L'idea dell'oggetto JSON è lo stesso come un dizionario/mappa in cui si dispone di chiavi e valori assegnati a tali chiavi, in modo da ciò che si vuole costruire sarebbe qualcosa di simile:

{"1": {"title": "my title", "date": "17-12-2011", "text": "HELLO!"}, "2": ....} 

dove il "1" è l'ID e il contenuto è un altro dizionario/mappa con le informazioni.

Diciamo che è stato assegnato l'oggetto a una variabile denominata my_map, ora si sarà in grado di gestirlo come:

my_map.1.title 
my_map.3.text 
... 

a scorrere su di esso basta usare:

for (info in my_map){ 
    data = my_map[info]; 
    //do what you need 
} 
Problemi correlati