Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将JSON数组转换为Java类对象列表_Java_Android_Json - Fatal编程技术网

将JSON数组转换为Java类对象列表

将JSON数组转换为Java类对象列表,java,android,json,Java,Android,Json,我有一个来自WFC服务的JSON字符串。当我尝试将JSON数组转换为List对象时,出现以下错误: ".JsonMappingException: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token at [Source: java.io.StringReader@41f27f18; line: 1, column: 1]" try { JS

我有一个来自WFC服务的JSON字符串。当我尝试将JSON数组转换为List对象时,出现以下错误:

".JsonMappingException: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token at [Source: java.io.StringReader@41f27f18; line: 1, column: 1]"
    try {            
         JSONObject jsonObject = null;
         yourJSONString.replace("\\", "");
         jsonObject = new JSONObject(yourJSONString);
         String newJSONString = jsonObject.get("GetCardsResult").toString();
         JSONArray jsonMainArr = new JSONArray(newJSONString);
         //now just loop the json Array
         for (int i = 0; i < jsonMainArr.length(); ++i) {                     
         JSONObject rec = jsonMainArr.getJSONObject(i);                     
         card.set_id(rec.get("ID").toString());                     
         //....      
       }                                                       
       } catch (JSONException e) {
         e.printStackTrace();
       } 
Java类(卡片类):

    try {            
         JSONObject jsonObject = null;
         yourJSONString.replace("\\", "");
         jsonObject = new JSONObject(yourJSONString);
         String newJSONString = jsonObject.get("GetCardsResult").toString();
         JSONArray jsonMainArr = new JSONArray(newJSONString);
         //now just loop the json Array
         for (int i = 0; i < jsonMainArr.length(); ++i) {                     
         JSONObject rec = jsonMainArr.getJSONObject(i);                     
         card.set_id(rec.get("ID").toString());                     
         //....      
       }                                                       
       } catch (JSONException e) {
         e.printStackTrace();
       } 
要反序列化的Java代码:

strResponse = responseHandler.handleResponse(response);
if (strResponse.contains("Credit") || strResponse.contains("Debit")) {
    ObjectMapper mapper = new ObjectMapper();
    strResponse= strResponse.replace("\"GetCardsResult\":", "");
    userCards = mapper.readValue(strResponse, mapper.getTypeFactory().constructCollectionType(List.class, Card.class));
}
    try {            
         JSONObject jsonObject = null;
         yourJSONString.replace("\\", "");
         jsonObject = new JSONObject(yourJSONString);
         String newJSONString = jsonObject.get("GetCardsResult").toString();
         JSONArray jsonMainArr = new JSONArray(newJSONString);
         //now just loop the json Array
         for (int i = 0; i < jsonMainArr.length(); ++i) {                     
         JSONObject rec = jsonMainArr.getJSONObject(i);                     
         card.set_id(rec.get("ID").toString());                     
         //....      
       }                                                       
       } catch (JSONException e) {
         e.printStackTrace();
       } 
JSON字符串:

{     "GetCardsResult":"[{\"ID\":3,\"CompanyID\":1155,\"CompanyName\":\"test\",\"FiscalCode\":null,\"Code\":\"1423127205\",\"Limit\":0.000,\"StateID\":1,\"CardState\":\"Activ\",\"Deleted\":false,\"Sold\":0.000,\"StartDate\":\"\/Date(1412974800000+0300)\/\",\"InvoiceStartDate\":\"\/Date(-62135596800000+0200)\/\",\"Quantity\":null,\"Value\":0.0,\"CardTypeID\":1,\"CardType\":\"Credit\",\"SoldChanged\":false,\"DriverName\":\"\",\"VehiclePlateNumber\":\"B 222 ART\",\"VehicleID\":null,\"Discount\":null,\"ContractID\":15,\"DiscountPerMonth\":null,\"ProductID\":null,\"ProductStateID\":null,\"Mail\":\"\",\"WithoutLimit\":true,\"ContractSold\":null,\"ContractLimit\":null,\"NumberOfTransactions\":null,\"DriverNameOnly\":null,\"DriverSurnameOnly\":null},{\"ID\":2881,\"CompanyID\":1155,\"CompanyName\":\"test\",\"FiscalCode\":null,\"Code\":\"test0000\",\"Limit\":125.000,\"StateID\":1,\"CardState\":\"Activ\",\"Deleted\":false,\"Sold\":132.330,\"StartDate\":\"\/Date(1436130000000+0300)\/\",\"InvoiceStartDate\":\"\/Date(-62135596800000+0200)\/\",\"Quantity\":null,\"Value\":0.0,\"CardTypeID\":1,\"CardType\":\"Credit\",\"SoldChanged\":false,\"DriverName\":\"aaa aaa\",\"VehiclePlateNumber\":\"aaa\",\"VehicleID\":null,\"Discount\":null,\"ContractID\":15,\"DiscountPerMonth\":null,\"ProductID\":null,\"ProductStateID\":null,\"Mail\":\"\",\"WithoutLimit\":true,\"ContractSold\":null,\"ContractLimit\":null,\"NumberOfTransactions\":null,\"DriverNameOnly\":null,\"DriverSurnameOnly\":null}]" }
    try {            
         JSONObject jsonObject = null;
         yourJSONString.replace("\\", "");
         jsonObject = new JSONObject(yourJSONString);
         String newJSONString = jsonObject.get("GetCardsResult").toString();
         JSONArray jsonMainArr = new JSONArray(newJSONString);
         //now just loop the json Array
         for (int i = 0; i < jsonMainArr.length(); ++i) {                     
         JSONObject rec = jsonMainArr.getJSONObject(i);                     
         card.set_id(rec.get("ID").toString());                     
         //....      
       }                                                       
       } catch (JSONException e) {
         e.printStackTrace();
       } 

提前谢谢

试试这个:

    try {            
         JSONObject jsonObject = null;
         yourJSONString.replace("\\", "");
         jsonObject = new JSONObject(yourJSONString);
         String newJSONString = jsonObject.get("GetCardsResult").toString();
         JSONArray jsonMainArr = new JSONArray(newJSONString);
         //now just loop the json Array
         for (int i = 0; i < jsonMainArr.length(); ++i) {                     
         JSONObject rec = jsonMainArr.getJSONObject(i);                     
         card.set_id(rec.get("ID").toString());                     
         //....      
       }                                                       
       } catch (JSONException e) {
         e.printStackTrace();
       } 
试试{
JSONObject JSONObject=null;
替换(“\\”,“”);
jsonObject=新的jsonObject(您的JSONString);
字符串newJSONString=jsonObject.get(“GetCardsResult”).toString();
JSONArray-jsonMainArr=newjsonarray(newJSONString);
//现在只需循环json数组
对于(inti=0;i
  • 在编译正则表达式之前或之后,向映射器字符串传递什么

  •     try {            
             JSONObject jsonObject = null;
             yourJSONString.replace("\\", "");
             jsonObject = new JSONObject(yourJSONString);
             String newJSONString = jsonObject.get("GetCardsResult").toString();
             JSONArray jsonMainArr = new JSONArray(newJSONString);
             //now just loop the json Array
             for (int i = 0; i < jsonMainArr.length(); ++i) {                     
             JSONObject rec = jsonMainArr.getJSONObject(i);                     
             card.set_id(rec.get("ID").toString());                     
             //....      
           }                                                       
           } catch (JSONException e) {
             e.printStackTrace();
           } 
    
  • 您是否尝试过任何像Gson这样的外部库?您需要的只是
    new Gson().fromJson(strResponse,new TypeToken(){}.getType();)

  •     try {            
             JSONObject jsonObject = null;
             yourJSONString.replace("\\", "");
             jsonObject = new JSONObject(yourJSONString);
             String newJSONString = jsonObject.get("GetCardsResult").toString();
             JSONArray jsonMainArr = new JSONArray(newJSONString);
             //now just loop the json Array
             for (int i = 0; i < jsonMainArr.length(); ++i) {                     
             JSONObject rec = jsonMainArr.getJSONObject(i);                     
             card.set_id(rec.get("ID").toString());                     
             //....      
           }                                                       
           } catch (JSONException e) {
             e.printStackTrace();
           } 
    

    尝试使用GSON,因为它非常高效且易于实现,下面的示例将是您的POJO类

        try {            
             JSONObject jsonObject = null;
             yourJSONString.replace("\\", "");
             jsonObject = new JSONObject(yourJSONString);
             String newJSONString = jsonObject.get("GetCardsResult").toString();
             JSONArray jsonMainArr = new JSONArray(newJSONString);
             //now just loop the json Array
             for (int i = 0; i < jsonMainArr.length(); ++i) {                     
             JSONObject rec = jsonMainArr.getJSONObject(i);                     
             card.set_id(rec.get("ID").toString());                     
             //....      
           }                                                       
           } catch (JSONException e) {
             e.printStackTrace();
           } 
    
    public class Post {
    
        @SerializedName("id")
        public long ID;
        public String title;
        public String author;
        public String url;
        @SerializedName("date")
        public Date dateCreated;
        public String body;
    
        public List tags;
    
        public Post() {
    
        }
    }
    
    //Tag.java
    public class Tag {
    
        public String name;
        public String url;
    
        public Tag() {
    
        }
    }
    
    这将说明如何将JSON字符串解析为对象类

        try {            
             JSONObject jsonObject = null;
             yourJSONString.replace("\\", "");
             jsonObject = new JSONObject(yourJSONString);
             String newJSONString = jsonObject.get("GetCardsResult").toString();
             JSONArray jsonMainArr = new JSONArray(newJSONString);
             //now just loop the json Array
             for (int i = 0; i < jsonMainArr.length(); ++i) {                     
             JSONObject rec = jsonMainArr.getJSONObject(i);                     
             card.set_id(rec.get("ID").toString());                     
             //....      
           }                                                       
           } catch (JSONException e) {
             e.printStackTrace();
           } 
    
    Reader reader = new InputStreamReader(content);
    GsonBuilder gsonBuilder = new GsonBuilder();
    gsonBuilder.setDateFormat("M/d/yy hh:mm a");
    Gson gson = gsonBuilder.create();
    List<Post> posts = new ArrayList<Post>();
    posts = Arrays.asList(gson.fromJson(reader, Post[].class));
    content.close();
    
    Reader Reader=新的InputStreamReader(内容);
    GsonBuilder GsonBuilder=新的GsonBuilder();
    gsonBuilder.setDateFormat(“M/d/yy hh:mm a”);
    Gson-Gson=gsonBuilder.create();
    List posts=new ArrayList();
    posts=Arrays.asList(gson.fromJson(reader,Post[].class));
    content.close();
    
    如何将json字符串转换为对象类?我以为ObjectMapper会这样做:)这就是为什么我所有的类变量都是Strings我猜他在使用com.fasterxml.jackson.databind.ObjectMapper.org.json.JSONObject<代码>strResponse=strResponse.replace(“\”GetCardsResult\”:“,”)
    将破坏您的JSON。您只删除了键和冒号,而不是前面和后面的大括号。另外:您的代码效率很低(最多需要处理四次字符串),并且可能会中断(例如,Web服务返回格式化的JSON,冒号前面有一个空格),userCards=gs.fromJson(strResponse,new-TypeToken(){}.getType());java.lang.IllegalStateException:应为BEGIN_数组,但在第1行第2列为BEGIN_对象,那么new Gson()如何从JSON(strResponse,Card.class)开始呢;你以为有一个对象,而不是数组?不能将数组转换为卡片对象。当然,JSON响应中有一个数组。有不止一个卡片信息,所以,我需要数组,只要我以某种方式通过objectLet转换对象。