2012-07-18 6 views
0

Problème lors de la lecture/l'analyse de la chaîne JSON suivante en Java.Comment lire les données JSON avec Java

code:

try{ 
    json = new JSONObject(result); 
//json now looks like this :- 
// {'header': '[{"doc_no": "DN00001","stage":"P"}]','section':'[{"upper":100,"lower":1]'} 
    if (json != null){ 
    // this line is throwing an exception!! 
    JSONObject header = new JSONObject("header"); 
    }catch(JSONException e){ 
    // Error Message 
} 

J'ai aussi essayé ceci:

JSONArray header = json.getJSONArray("header"); 

mais jeter encore une exception.

Qu'est-ce qui me manque?

+1

quelle exception? – hvgotcodes

+1

Je pense que vous devez obtenir le champ 'header' de la variable' json'. Créer un nouveau JSONObject a l'air bizarre. – nhahtdh

Répondre

1

Voici mec prendre ce code. Fixez votre chaîne JSON si vous voulez obtenir JSONObject sortir

public static void main(String[] args) throws JSONException { 
    String result = "{'header': '[{\"doc_no\": \"DN00001\",\"stage\":\"P\"}]','section':'[{\"upper\":100,\"lower\":1]'}"; 
    JSONObject json = new JSONObject(result); 
    // json now looks like this :- 
    // 
    if (json != null) { 
     String header = json.getString("header"); 
     System.out.println(header); 
    } 

} 

Alors qu'est-ce qui ne va pas avec vous? Couple de choses:

  1. Votre chaîne JSON est illégale. Merci aux parseurs de vous supporter. Il devrait être

    { 
        "header": [{"doc_no": "DN00001","stage":"P"}], 
        "section":[{"upper":100,"lower":1] 
    } 
    
  2. Il ne résoudra pas votre problème seul. Puisque vous vouliez obtenir JSONObject mais vous avez fourni un JSONArray (pourquoi avez-vous fait cela?). Supprimez donc ces crochets.

  3. Toujours pas content. Vous voyez que vous essayez de créer un nouveau JSONObject en faisant (évidemment) new JSONObject("header") en utilisant une chaîne qui n'est pas un JSON. 9Et l'attendre pour ne pas jeter d'erreur? Comment cruel.) Plus vous vouliez get pas set.Donc, utilisez json.getXXX("header") où XXX peut être String, JSONObject ou JSONArray et beaucoup plus.

+0

Great !, mais si vous avez lu ma question, j'ai également tenté d'obtenir JSONArray ("header") avec pas de chance, de bons pointeurs si ... – gath

+0

@gath mec, vous devez réparer votre chaîne JSON comme # 1. Sautez # 2 si vous voulez 'JSONArray'. Dans # 3, utilisez 'json.getJSONArray (" header ");'. – Nishant

+0

Bien que tout le monde a donné un pointeur vers la bonne direction, c'est-à-dire que la chaîne JSON n'a pas été formatée correctement, je vais choisir cette réponse pour son explication détaillée. Merci à tous, mon serveur (en python) ne formatait pas le json correctement, je l'ai modifié et maintenant toutes les clés dans le json ont des guillemets doubles {"header": [{"doc_no": "DN00001"}]}. – gath

4

Ce fichier JSON n'est pas valide.

'header': '[{"doc_no": "DN00001","stage":"P"}]' 

paramètre ne peut être entouré de '
chaîne doit être entouré de " au lieu de '

Lire http://json.org/ sur la syntaxe JSON.

+2

Pourquoi n'est-ce pas un JSON valide? C'est un JSON valide avec la clé 'header' et la valeur comme * string * [{"doc_no": "DN00001", "stage": "P"}], Ce n'est pas strictement valide mais la plupart des parseurs fonctionneraient. – Nishant

+1

"pas strictement valide" signifie que ce n'est pas valide - certains parseurs pourraient avoir moins d'application –

+0

Ensuite, il devrait être entouré avec '" 'et non' ''. – pawelzieba

0

JSONObject header = new JSONObject("header");

ne signifie pas que vous pour obtenir l'en-tête de json, pas créer un nouveau JSONObject?

comme dans

JSONObject header = json.get("header");

1
JSONObject header = new JSONObject("header"); 

que vous vouliez obtenir le champ "en-tête" de votre objet existant?

JSONObject header = json.getJSONObject("header"); 

Mais à en juger de votre commentaire

// {'header': '[{"doc_no": "DN00001","stage":"P"}]','section':'[{"upper":100,"lower":1]'} 

vous avez l'intention « tête » d'être un tableau (pas un objet), mais les données qu'il a en tant que chaîne (qui ressemble à un tableau), donc vous avez probablement besoin de réparer le JSON ainsi que le code Java.