2016-11-04 87 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