2016-03-28 7 views
0

Wie kann ich die folgende JSON in eine Klasse in Jackson Java umwandelnJackson json Serialisierungen nicht für Integer-Schlüssel

{ 
    "status": 0, 
    "msg": "0 out of 1 Transactions Fetched Successfully", 
    "transaction_details": { 
    "3690": { 
     "mihpayid": "Not Found", 
     "status": "Not Found" 
    } 
    } 
} 

Der Integer-Schlüssel in transaction_details ein Problem verursacht, haben wir keine Kontrolle über das Format als zurück aus ein Zahlungsgateway für Dritte.

+0

Was ist das Problem? Ist es eine Ausnahme? –

+0

bieten Sie Ihre Jackson Java bitte –

+0

Bitte stellen Sie eine Zuordnung Klasse –

Antwort

1

Gestalten Sie Ihre folgenden Klassen nach unten, wenn nicht, dann tat,

import com.fasterxml.jackson.annotation.JsonProperty; 

public class Jackson { 

    private String status; 
    private String msg; 

    private TransactionDetails transaction_details = new TransactionDetails(); 

    public String getStatus() { 
     return status; 
    } 
    public void setStatus(String status) { 
     this.status = status; 
    } 
    public String getMsg() { 
     return msg; 
    } 
    public void setMsg(String msg) { 
     this.msg = msg; 
    } 
    public TransactionDetails getTransaction_details() { 
     return transaction_details; 
    } 
    public void setTransaction_details(TransactionDetails transaction_details) { 
     this.transaction_details = transaction_details; 
    } 

} 

class TransactionDetails{ 

    private A3690 a3690; 

    @JsonProperty("3690") 
    public A3690 getA3690() { 
     return a3690; 
    } 

    public void setA3690(A3690 a3690) { 
     this.a3690 = a3690; 
    } 

} 

class A3690{ 

    private String mihpayid ; 
    private String status; 

    public String getMihpayid() { 
     return mihpayid; 
    } 
    public void setMihpayid(String mihpayid) { 
     this.mihpayid = mihpayid; 
    } 
    public String getStatus() { 
     return status; 
    } 
    public void setStatus(String status) { 
     this.status = status; 
    } 


} 

Sie es ebenfalls verwenden können, für die Erstellung von Jackson Objekt zu JSON,

String jsonString = null; 

     try { 

      Jackson jacksonObj = new Jackson(); // populate it as per needs... 
      jsonString = objectMapper.writeValueAsString(jacksonObj); 

     } catch (JsonProcessingException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     System.out.println(jsonString); // will return JSON into String formate. 

Und zum Konvertieren von String JSON zu Jackson Object ebenfalls,

String str = "{"status":"status","msg":"msg","transaction_details":{"3690":{"mihpayid":"mihpayid","status":"status1"}}}"; 

     try { 
      Jackson jacksonObject = objectMapper.readValue(str, Jackson.class); 

      System.out.println(" Status -" + jacksonObject.getStatus() + " : msg - " + jacksonObject.getMsg()); 

      System.out.println(" Mihpayid -" + jacksonObject.getTransaction_details().getA3690().getMihpayid() + " : Status - " + jacksonObject.getTransaction_details().getA3690().getStatus()); 

     } catch (JsonParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (JsonMappingException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

AKTUALISIERT:

Wenn Schlüssel 3690 nicht fix ist, ich meine, es ist zufällig dann need to refactoring Jackson kommt class likewise, (hier nur Jackson-Klasse ist für alle genug, keine Notwendigkeit, mehr Klassen wie oben erwähnt zu erstellen)

public class Jackson {

private String status; 
private String msg; 

//private TransactionDetails transaction_details = new TransactionDetails(); 

public String getStatus() { 
    return status; 
} 
public void setStatus(String status) { 
    this.status = status; 
} 
public String getMsg() { 
    return msg; 
} 
public void setMsg(String msg) { 
    this.msg = msg; 
} 

HashMap<String, HashMap<String,String>> transaction_details = new HashMap<String, HashMap<String,String>>(); 

@JsonProperty("transaction_details") 
public HashMap<String, HashMap<String,String>> getMap() { 
    return transaction_details; 
} 

public void setMap(HashMap<String, HashMap<String,String>> transaction_details) { 
    this.transaction_details = transaction_details; 
} 

}


Genießen, Best of luck ... !!!

+0

Was ist, wenn der nächste Schlüssel nicht '3690' ist, sondern eine andere Nummer? –

+0

Schlüssel kann alles andere als nötig sein, um es zu beheben, ich sage nur 3690, weil in Frage gestellt wird. was auch immer Schlüssel Sie wollen nur @ JsonProperty ("Schlüssel-Wert") hier schreiben. –

+0

@SashaSalauyou meinst du 3690 wird zufällig kommen? –

Verwandte Themen