2016-11-04 89 views
0

如何轉換一個JSON字符串與多個對象爲Java對象:轉換JSON字符串多個對象爲類實例

編輯:這似乎不太可能,這是可行的,但將這個創建2類實例類聲明的:

String JsonStr = "{\"bills\":[{\"amount\":\"13\",\"billId\":\"billid3\"}] ,\"bills\":[{\"amount\":\"155\",\"billId\":\"billid4\"}]}"; 
ObjectMapper mapper = new ObjectMapper(); 
Statement obj = mapper.readValue(JsonStr, obj.class); 

如果沒有,我怎麼寫接收一個JSON字符串與同類型(銀行存款證明)的多個唯一對象的程序代碼,並建立相應的Java數它的對象實例? 我將不勝感激任何幫助。

非常感謝!

+0

在代碼片段中是否存在拼寫錯誤?你的'字符串'沒有被引號包圍。 – SwiftsNamesake

+1

是的,對不起,我沒有把太多的注意力放在那個部分..考慮到這3行是java runnable – Almanz

+0

你可能會得到一堆賬單。你期望有什麼不同嗎? – notionquest

回答

0

我想您所提供的JSON字符串應該是這樣

「{\」 票據\ 「:[{\」 量\ 「:\」 13 \ 「\ 」BILLID \「:\」 billid3 \ 「} ,{\」 量\ 「:\」 155 \ 「\ 」BILLID \「:\ 」billid4 \「}]}」

如果是這樣的話,你可以使用解決方案如下:

創建兩個類Bill.javaTestObject.java如下:

Bill.java

public class Bill { 
    private double amount; 
    private String billId; 
    /** 
    * @return the amount 
    */ 
    public double getAmount() { 
     return amount; 
    } 
    /** 
    * @param amount the amount to set 
    */ 
    public void setAmount(double amount) { 
     this.amount = amount; 
    } 
    /** 
    * @return the billId 
    */ 
    public String getBillId() { 
     return billId; 
    } 
    /** 
    * @param billId the billId to set 
    */ 
    public void setBillId(String billId) { 
     this.billId = billId; 
    } 

} 

TestObject.java

import java.util.List; 

public class TestObject { 

    private List<Bill> bills; 

    /** 
    * @return the bills 
    */ 
    public List<Bill> getBills() { 
     return bills; 
    } 

    /** 
    * @param bills the bills to set 
    */ 
    public void setBills(List<Bill> bills) { 
     this.bills = bills; 
    } 

} 

這裏是主程序來測試代碼。

測試。java

import com.fasterxml.jackson.databind.ObjectMapper; 

public class Test { 

    public static void main(String[] args) { 
     String jsonStr = "{\"bills\":[{\"amount\":\"13\",\"billId\":\"billid3\"} ,{\"amount\":\"155\",\"billId\":\"billid4\"}]}"; 

     ObjectMapper mapper = new ObjectMapper(); 
     try { 
      TestObject testObject = mapper.readValue(jsonStr, TestObject.class); 
      System.out.print(testObject); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

非常感謝。你的代碼讓我意識到傑克遜的映射器是如何自動處理對象創建的。雖然它似乎在我的結尾似乎仍然存在類型的錯誤:「無法識別的字段」帳單「(類sample.TestObject),未標記爲可忽略」。如果你知道如何解決這個問題,將不勝感激1 – Almanz

+0

@Almanz - Welcome..Cheers ... !! –

1

我已經使用了gson-2.2.2.jar。下面給出

請找代碼:

Bill.java

public class Bill 
{ 
    private double billAmount; 

    private String billId; 

    //getters and setters 
} 

Main.java

import java.lang.reflect.Type; 
import java.util.ArrayList; 
import java.util.List; 
import com.google.gson.Gson; 
import com.google.gson.reflect.TypeToken; 
public class Main 
{ 
    public static void main(String[] args) 
    { 
     Bill bill = null; 
     List<Bill> bills = new ArrayList<Bill>(); 
     for (int i = 0; i < 5; i++) 
     { 
      bill = new Bill(); 
      bill.setBillAmount(100 + (i + 1)); 
      bill.setBillId("bill_id_" + (i + 1)); 
      bills.add(bill); 
     } 
     Gson gson = new Gson(); 
     String json = gson.toJson(bills, new TypeToken<List<Bill>>() 
     {}.getType()); 
     System.out.println(json); 

     Type mapType = new TypeToken<List<Bill>>() 
     {}.getType(); 
     List<Bill> billsRetrieved = new Gson().fromJson(json, mapType); 
     for (Bill bill2 : billsRetrieved) 
     { 
      System.out.println(bill2.getBillId()); 
     } 
    } 
} 

輸出:

[ 
    { 
     "billAmount":101.0, 
     "billId":"bill_id_1" 
    }, 
    { 
     "billAmount":102.0, 
     "billId":"bill_id_2" 
    }, 
    { 
     "billAmount":103.0, 
     "billId":"bill_id_3" 
    }, 
    { 
     "billAmount":104.0, 
     "billId":"bill_id_4" 
    }, 
    { 
     "billAmount":105.0, 
     "billId":"bill_id_5" 
    } 
] 

bill_id_1 bill_id_2 bill_id_3 bill_id_4 bill_id_5

請回復的情況下,你需要進一步的解釋。

+1

這不是我想要的,但是把我介紹給Gson看起來非常有用。我一定會利用它! – Almanz