2016-07-27 16 views
2

Ich habe eine JSON-Datei wie:Wie parsen wir JSON ohne JSONArray in Java?

{ 
    "a1" : { 
    "Contestant 1 marks" : 44, 
    "Contestant 10 marks" : 30, 
    "Contestant 11 marks" : 15, 
    "Contestant 12 marks" : 35, 
    "Contestant 13 marks" : 28, 
    "Contestant 14 marks" : 8, 
    "Contestant 2 marks" : 35, 
    "Contestant 3 marks" : 30.899999618530273, 
    "Contestant 4 marks" : 39, 
    "Contestant 5 marks" : 45, 
    "Contestant 6 marks" : 47, 
    "Contestant 7 marks" : 17, 
    "Contestant 8 marks" : 37, 
    "Contestant 9 marks" : 35 
    }, 
    "a2" : { 
    "Contestant 1 marks" : 35, 
    "Contestant 10 marks" : 30, 
    "Contestant 11 marks" : 15, 
    "Contestant 12 marks" : 35, 
    "Contestant 13 marks" : 28, 
    "Contestant 14 marks" : 8, 
    "Contestant 2 marks" : 30, 
    "Contestant 3 marks" : 30.899999618530273, 
    "Contestant 4 marks" : 39, 
    "Contestant 5 marks" : 45, 
    "Contestant 6 marks" : 47, 
    "Contestant 7 marks" : 17, 
    "Contestant 8 marks" : 37, 
    "Contestant 9 marks" : 35 
    } 
} 

Es scheint, als ob es zwei JSON-Objekte hier a1, a2. Und diese Objekte selbst haben 14 JSON-Objekte.

Ich habe eine String completeJson;, die komplette JSON enthält.

Nun, wenn ich schreibe

JSONObject jsonRootObj = new JSONObject(completeJson); 

Dann whilch json Objekt in jsonRootObj kommen wird?

Wie bekomme ich auch den Wert für den Schlüssel: "Kandidat 1 Marken" für a1 und a2 in meiner JSON-Datei?

Ich möchte den Wert der Objekte in a1 mit Wert der Objekte in a2, die die gleiche KEY haben.

+1

jsonRootObj.get ("a1"). Get ("Kandidat 1 Marks"), da die von Ihnen gepostete JSON kein Array enthält –

+0

Entschuldigung, Sie müssen Folgendes umsetzen: ((JSONObject) jo.get ("a1")) .get ("Kandidat 1 Noten") –

Antwort

0

Sie können die Parser a1 und a2 als JSONObject abrufen und dann die Werte ändern.

JSONObject jsonRootObj = JSON.parseObject(completeJson); 
JSONObject a1 = jsonRootObj.getJSONObject("a1"); 
JSONObject a2 = jsonRootObj.getJSONObject("a2"); 
for (Map.Entry<String, Object> entry : a1.entrySet()) { 
    if (a2.containsKey(entry.getKey())) { 
     a2.put(entry.getKey(), entry.getValue()); 
    } 
} 

PS: Mein JSON-Parser ist fastjson

+0

Schreiben 'JSONObject a1 = jsonRootObj.getJSONObject (" a1 ");' löst Ausnahme aus: - org.json.JSONException: JSONObject ["a1"] nicht gefunden. –

+0

welchen JSON-Parser verwenden Sie? –

+0

'java-json'.jar ist die Datei, die ich in meine referenzierten Bibliotheken eingefügt habe. Und kannst du sagen, wie man fastjson in mein Projekt einfügt? –

0

auf diese Weise Sie Werte von A1 erhalten:

long valA1 = ((Long)((JSONObject)jo.get("a1")).get("Contestant 1 marks")).longValue(); 

auf diese Weise Sie in A2 setzen:

((JSONObject)((JSONObject)jo.get("a2")).get("Contestant 1 marks")).put("Contestant 1 marks", valA1); 

wo jo ist:

JSONParser jp = new JSONParser(); 
JSONObject jo = (JSONObject)jp.parse(<your json string>); 
0

Lass uns dein Leben einfacher machen.

Download gson library.

Klicken Sie mit der rechten Maustaste auf das Projekt, Build Path-> Externe Archive hinzufügen.

Erstellen Sie dann eine Klasse mit welchem ​​Namen Sie wollen (I verwendet Example.java):

import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 

public class Example { 

    @SerializedName("a1") 
    @Expose 
    private A1 a1; 
    @SerializedName("a2") 
    @Expose 
    private A2 a2; 

    /** 
    * @return The a1 
    */ 
    public A1 getA1() { 
     return a1; 
    } 

    /** 
    * @param a1 The a1 
    */ 
    public void setA1(A1 a1) { 
     this.a1 = a1; 
    } 

    /** 
    * @return The a2 
    */ 
    public A2 getA2() { 
     return a2; 
    } 

    /** 
    * @param a2 The a2 
    */ 
    public void setA2(A2 a2) { 
     this.a2 = a2; 
    } 

    public class A1 { 

     @SerializedName("Contestant 1 marks") 
     @Expose 
     private int contestant1Marks; 
     @SerializedName("Contestant 10 marks") 
     @Expose 
     private int contestant10Marks; 
     @SerializedName("Contestant 11 marks") 
     @Expose 
     private int contestant11Marks; 
     @SerializedName("Contestant 12 marks") 
     @Expose 
     private int contestant12Marks; 
     @SerializedName("Contestant 13 marks") 
     @Expose 
     private int contestant13Marks; 
     @SerializedName("Contestant 14 marks") 
     @Expose 
     private int contestant14Marks; 
     @SerializedName("Contestant 2 marks") 
     @Expose 
     private int contestant2Marks; 
     @SerializedName("Contestant 3 marks") 
     @Expose 
     private float contestant3Marks; 
     @SerializedName("Contestant 4 marks") 
     @Expose 
     private int contestant4Marks; 
     @SerializedName("Contestant 5 marks") 
     @Expose 
     private int contestant5Marks; 
     @SerializedName("Contestant 6 marks") 
     @Expose 
     private int contestant6Marks; 
     @SerializedName("Contestant 7 marks") 
     @Expose 
     private int contestant7Marks; 
     @SerializedName("Contestant 8 marks") 
     @Expose 
     private int contestant8Marks; 
     @SerializedName("Contestant 9 marks") 
     @Expose 
     private int contestant9Marks; 

     /** 
     * @return The contestant1Marks 
     */ 
     public int getContestant1Marks() { 
      return contestant1Marks; 
     } 

     /** 
     * @param contestant1Marks The Contestant 1 marks 
     */ 
     public void setContestant1Marks(int contestant1Marks) { 
      this.contestant1Marks = contestant1Marks; 
     } 

     /** 
     * @return The contestant10Marks 
     */ 
     public int getContestant10Marks() { 
      return contestant10Marks; 
     } 

     /** 
     * @param contestant10Marks The Contestant 10 marks 
     */ 
     public void setContestant10Marks(int contestant10Marks) { 
      this.contestant10Marks = contestant10Marks; 
     } 

     /** 
     * @return The contestant11Marks 
     */ 
     public int getContestant11Marks() { 
      return contestant11Marks; 
     } 

     /** 
     * @param contestant11Marks The Contestant 11 marks 
     */ 
     public void setContestant11Marks(int contestant11Marks) { 
      this.contestant11Marks = contestant11Marks; 
     } 

     /** 
     * @return The contestant12Marks 
     */ 
     public int getContestant12Marks() { 
      return contestant12Marks; 
     } 

     /** 
     * @param contestant12Marks The Contestant 12 marks 
     */ 
     public void setContestant12Marks(int contestant12Marks) { 
      this.contestant12Marks = contestant12Marks; 
     } 

     /** 
     * @return The contestant13Marks 
     */ 
     public int getContestant13Marks() { 
      return contestant13Marks; 
     } 

     /** 
     * @param contestant13Marks The Contestant 13 marks 
     */ 
     public void setContestant13Marks(int contestant13Marks) { 
      this.contestant13Marks = contestant13Marks; 
     } 

     /** 
     * @return The contestant14Marks 
     */ 
     public int getContestant14Marks() { 
      return contestant14Marks; 
     } 

     /** 
     * @param contestant14Marks The Contestant 14 marks 
     */ 
     public void setContestant14Marks(int contestant14Marks) { 
      this.contestant14Marks = contestant14Marks; 
     } 

     /** 
     * @return The contestant2Marks 
     */ 
     public int getContestant2Marks() { 
      return contestant2Marks; 
     } 

     /** 
     * @param contestant2Marks The Contestant 2 marks 
     */ 
     public void setContestant2Marks(int contestant2Marks) { 
      this.contestant2Marks = contestant2Marks; 
     } 

     /** 
     * @return The contestant3Marks 
     */ 
     public float getContestant3Marks() { 
      return contestant3Marks; 
     } 

     /** 
     * @param contestant3Marks The Contestant 3 marks 
     */ 
     public void setContestant3Marks(float contestant3Marks) { 
      this.contestant3Marks = contestant3Marks; 
     } 

     /** 
     * @return The contestant4Marks 
     */ 
     public int getContestant4Marks() { 
      return contestant4Marks; 
     } 

     /** 
     * @param contestant4Marks The Contestant 4 marks 
     */ 
     public void setContestant4Marks(int contestant4Marks) { 
      this.contestant4Marks = contestant4Marks; 
     } 

     /** 
     * @return The contestant5Marks 
     */ 
     public int getContestant5Marks() { 
      return contestant5Marks; 
     } 

     /** 
     * @param contestant5Marks The Contestant 5 marks 
     */ 
     public void setContestant5Marks(int contestant5Marks) { 
      this.contestant5Marks = contestant5Marks; 
     } 

     /** 
     * @return The contestant6Marks 
     */ 
     public int getContestant6Marks() { 
      return contestant6Marks; 
     } 

     /** 
     * @param contestant6Marks The Contestant 6 marks 
     */ 
     public void setContestant6Marks(int contestant6Marks) { 
      this.contestant6Marks = contestant6Marks; 
     } 

     /** 
     * @return The contestant7Marks 
     */ 
     public int getContestant7Marks() { 
      return contestant7Marks; 
     } 

     /** 
     * @param contestant7Marks The Contestant 7 marks 
     */ 
     public void setContestant7Marks(int contestant7Marks) { 
      this.contestant7Marks = contestant7Marks; 
     } 

     /** 
     * @return The contestant8Marks 
     */ 
     public int getContestant8Marks() { 
      return contestant8Marks; 
     } 

     /** 
     * @param contestant8Marks The Contestant 8 marks 
     */ 
     public void setContestant8Marks(int contestant8Marks) { 
      this.contestant8Marks = contestant8Marks; 
     } 

     /** 
     * @return The contestant9Marks 
     */ 
     public int getContestant9Marks() { 
      return contestant9Marks; 
     } 

     /** 
     * @param contestant9Marks The Contestant 9 marks 
     */ 
     public void setContestant9Marks(int contestant9Marks) { 
      this.contestant9Marks = contestant9Marks; 
     } 

    } 

    public class A2 { 

     @SerializedName("Contestant 1 marks") 
     @Expose 
     private int contestant1Marks; 
     @SerializedName("Contestant 10 marks") 
     @Expose 
     private int contestant10Marks; 
     @SerializedName("Contestant 11 marks") 
     @Expose 
     private int contestant11Marks; 
     @SerializedName("Contestant 12 marks") 
     @Expose 
     private int contestant12Marks; 
     @SerializedName("Contestant 13 marks") 
     @Expose 
     private int contestant13Marks; 
     @SerializedName("Contestant 14 marks") 
     @Expose 
     private int contestant14Marks; 
     @SerializedName("Contestant 2 marks") 
     @Expose 
     private int contestant2Marks; 
     @SerializedName("Contestant 3 marks") 
     @Expose 
     private float contestant3Marks; 
     @SerializedName("Contestant 4 marks") 
     @Expose 
     private int contestant4Marks; 
     @SerializedName("Contestant 5 marks") 
     @Expose 
     private int contestant5Marks; 
     @SerializedName("Contestant 6 marks") 
     @Expose 
     private int contestant6Marks; 
     @SerializedName("Contestant 7 marks") 
     @Expose 
     private int contestant7Marks; 
     @SerializedName("Contestant 8 marks") 
     @Expose 
     private int contestant8Marks; 
     @SerializedName("Contestant 9 marks") 
     @Expose 
     private int contestant9Marks; 

     /** 
     * @return The contestant1Marks 
     */ 
     public int getContestant1Marks() { 
      return contestant1Marks; 
     } 

     /** 
     * @param contestant1Marks The Contestant 1 marks 
     */ 
     public void setContestant1Marks(int contestant1Marks) { 
      this.contestant1Marks = contestant1Marks; 
     } 

     /** 
     * @return The contestant10Marks 
     */ 
     public int getContestant10Marks() { 
      return contestant10Marks; 
     } 

     /** 
     * @param contestant10Marks The Contestant 10 marks 
     */ 
     public void setContestant10Marks(int contestant10Marks) { 
      this.contestant10Marks = contestant10Marks; 
     } 

     /** 
     * @return The contestant11Marks 
     */ 
     public int getContestant11Marks() { 
      return contestant11Marks; 
     } 

     /** 
     * @param contestant11Marks The Contestant 11 marks 
     */ 
     public void setContestant11Marks(int contestant11Marks) { 
      this.contestant11Marks = contestant11Marks; 
     } 

     /** 
     * @return The contestant12Marks 
     */ 
     public int getContestant12Marks() { 
      return contestant12Marks; 
     } 

     /** 
     * @param contestant12Marks The Contestant 12 marks 
     */ 
     public void setContestant12Marks(int contestant12Marks) { 
      this.contestant12Marks = contestant12Marks; 
     } 

     /** 
     * @return The contestant13Marks 
     */ 
     public int getContestant13Marks() { 
      return contestant13Marks; 
     } 

     /** 
     * @param contestant13Marks The Contestant 13 marks 
     */ 
     public void setContestant13Marks(int contestant13Marks) { 
      this.contestant13Marks = contestant13Marks; 
     } 

     /** 
     * @return The contestant14Marks 
     */ 
     public int getContestant14Marks() { 
      return contestant14Marks; 
     } 

     /** 
     * @param contestant14Marks The Contestant 14 marks 
     */ 
     public void setContestant14Marks(int contestant14Marks) { 
      this.contestant14Marks = contestant14Marks; 
     } 

     /** 
     * @return The contestant2Marks 
     */ 
     public int getContestant2Marks() { 
      return contestant2Marks; 
     } 

     /** 
     * @param contestant2Marks The Contestant 2 marks 
     */ 
     public void setContestant2Marks(int contestant2Marks) { 
      this.contestant2Marks = contestant2Marks; 
     } 

     /** 
     * @return The contestant3Marks 
     */ 
     public float getContestant3Marks() { 
      return contestant3Marks; 
     } 

     /** 
     * @param contestant3Marks The Contestant 3 marks 
     */ 
     public void setContestant3Marks(float contestant3Marks) { 
      this.contestant3Marks = contestant3Marks; 
     } 

     /** 
     * @return The contestant4Marks 
     */ 
     public int getContestant4Marks() { 
      return contestant4Marks; 
     } 

     /** 
     * @param contestant4Marks The Contestant 4 marks 
     */ 
     public void setContestant4Marks(int contestant4Marks) { 
      this.contestant4Marks = contestant4Marks; 
     } 

     /** 
     * @return The contestant5Marks 
     */ 
     public int getContestant5Marks() { 
      return contestant5Marks; 
     } 

     /** 
     * @param contestant5Marks The Contestant 5 marks 
     */ 
     public void setContestant5Marks(int contestant5Marks) { 
      this.contestant5Marks = contestant5Marks; 
     } 

     /** 
     * @return The contestant6Marks 
     */ 
     public int getContestant6Marks() { 
      return contestant6Marks; 
     } 

     /** 
     * @param contestant6Marks The Contestant 6 marks 
     */ 
     public void setContestant6Marks(int contestant6Marks) { 
      this.contestant6Marks = contestant6Marks; 
     } 

     /** 
     * @return The contestant7Marks 
     */ 
     public int getContestant7Marks() { 
      return contestant7Marks; 
     } 

     /** 
     * @param contestant7Marks The Contestant 7 marks 
     */ 
     public void setContestant7Marks(int contestant7Marks) { 
      this.contestant7Marks = contestant7Marks; 
     } 

     /** 
     * @return The contestant8Marks 
     */ 
     public int getContestant8Marks() { 
      return contestant8Marks; 
     } 

     /** 
     * @param contestant8Marks The Contestant 8 marks 
     */ 
     public void setContestant8Marks(int contestant8Marks) { 
      this.contestant8Marks = contestant8Marks; 
     } 

     /** 
     * @return The contestant9Marks 
     */ 
     public int getContestant9Marks() { 
      return contestant9Marks; 
     } 

     /** 
     * @param contestant9Marks The Contestant 9 marks 
     */ 
     public void setContestant9Marks(int contestant9Marks) { 
      this.contestant9Marks = contestant9Marks; 
     } 

    } 

} 

Danach,

String yourString = "json in String format"; 
Example example = new Gson().fromJson(yourString, Example.class); 
example.getA1().getContestant1Marks(); 
example.getA2().getContestant1Marks(); 

Thats it. Sie können diese Getter-Methoden verwenden.

PS: Ich habe diese Klasse mit jsonschema2pojo erstellt, indem Sie Ihre JSON in es kopieren.

Glückliche Kodierung ... !!!

+0

Ich habe nicht gradle in meinem Java-Projekt .. was soll ich tun? Wenn ich das in Android mache, dann muss ich die JSON-Datei vom Server holen (aber ich habe keinen Server dafür) –

+0

@Ayushibhardwaj Welchen Editor benutzen Sie? –

+0

Eclipse für Java ... –

0

Ihre JSON-Zeichenfolge enthält ein namenloses Stammelement, beginnend bei der ersten { und endend bei der letzten }. Dieses Objekt wird in die Variable gelangen.Um die a1 oder a2 Objekt zu erhalten, so etwas zu tun:

JSONObject a1 = jsonRootObj.getJSONObject("a1"); 

Um den Wert des ersten Teilnehmer in a1 zu bekommen, können Sie etwas tun:

int marks = a1.getInt("Contestant 1 marks"); 

Sie finden die vollständige Javadoc von JSONObjecthere. Ein JSON-Array ist nicht erforderlich.

+0

@AmitUpadhyay Sind Sie sicher, dass die Variable 'completeJson' den JSON-Code enthält, den Sie in Ihrer Frage geschrieben haben? – msrd0