2016-03-28 11 views
0

如何轉換以下JSON到一個類傑克遜的Java傑克遜JSON序列化失敗爲整數鍵

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

在transaction_details的整數鍵造成的問題,我們必須在格式與它沒有返回控制第三方支付網關。

+0

是什麼問題?這是例外嗎? –

+0

提供您的傑克遜Java請 –

+0

請提供一個映射類 –

回答

1

設計你的下列類按以下,如果沒有那麼做,

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; 
    } 


} 

,你可以用它同樣,用於創建傑克遜對象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. 

並且爲了將字符串JSON轉換成傑克遜對象同樣地,

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(); 
     } 

更新:

如果鍵3690沒有修復, 我的意思是隨機到來然後need to refactoring傑克遜class likewise,(這裏只傑克遜類是足以讓所有, 無需像上面提到的那樣創建更多課程)

公共類傑克遜{

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; 
} 

}


享受,祝您好運...!

+0

如果下一個鍵不是'3690'但是又有一個數字? –

+0

鍵可以是任何需要修復它,我只是把它'3690',因爲它的問題。你想要什麼鍵只需要在這裏寫@JsonProperty(「鍵值」)。 –

+0

@SashaSalauyou你的意思是3690是隨機來的? –