【问题标题】:converting JSONArray to POJO class List<type>, not able to converting将 JSONArray 转换为 POJO 类 List<type>,无法转换
【发布时间】:2018-01-29 14:07:05
【问题描述】:

请找到以下代码,我正在尝试将 JSONArray 对象设置为 List&lt;type&gt; 类型的 SET 方法。

public class SalesOrder {

    public static SalesOrder fromJSONObject(JSONObject o)
    {
        SalesOrder sa=new SalesOrder();
        sa.setOrderNumber(o.getString("order_number"));
        sa.setCustomerName(o.getString("customer_name"));
        sa.setOrder_files(o.getJSONArray("order_files"));
        return sa;

    }

    private String orderNumber;
    private String customerName;

    List<OrderFile> order_files;

    public List<OrderFile> getOrder_files() {
        return order_files;
    }
    public void setOrder_files(List<OrderFile> order_files) {
        this.order_files = order_files;
    }
}

但我无法设置值,它会抛出错误

SalesOrder 类型中的方法 setOrder_files(List) 是 不适用于参数(JSONArray)。

请找到我的order_files JSONArray

order_files":[  
   {  
      "file_name":"05_06_Field_lenghts_Requirements.pdf",
      "file_type":"Invoice",
      "file_id":"59c9ede7c3c867a6b269e111"
   },
   {  
      "file_name":"ideas.JPG",
      "file_type":"Packaging List",
      "file_id":"59c9ee65c3c867a6b269e113"
   }
]

请找到我的订单文件 POJO 类

public class OrderFile {

    String file_id;
    String file_name;
    String file_type;


    public String getFile_id() {
        return file_id;
    }
    public void setFile_id(String file_id) {
        this.file_id = file_id;
    }
    public String getFile_name() {
        return file_name;
    }
    public void setFile_name(String file_name) {
        this.file_name = file_name;
    }
    public String getFile_type() {
        return file_type;
    }
    public void setFile_type(String file_type) {
        this.file_type = file_type;
    }
}

根据收到的 cmets - 我正在尝试将 JSONArray 转换为 ArrayList 并尝试将其作为参数传递给 sa.setOrder_files()

   List<OrderFile> filelist=new ArrayList<OrderFile>();
    JSONArray filearray= o.getJSONArray("order_files");
    if(filearray!=null)
    {
        for(int i=0;i<filearray.length();i++)
        {
            filelist.add(filearray.getString(i));
        }
    }
    sa.setOrder_files(filelist);

但是在数组列表中添加项目时出现错误。

错误:类型 List 中的方法 add(OrderFile) 不适用于参数 (String)

【问题讨论】:

  • 您的方法setOrder_files(List&lt;OrderFile&gt; order_files) 期望OrderFile 列表作为参数,o.getJSONArray("order_files") 返回一个JSONArray 对象。
  • 看看你的对象类型......你正试图将一个字符串添加到一个包含你的自定义对象的列表中
  • 建议:使用Gson或Jackson将JSON转成POJO

标签: java arrays json


【解决方案1】:
 sa.setOrder_files(o.getJSONArray("order_files"));

这一行是问题所在,您的函数 setOrder_files 需要一个列表而不是 JSON 数组。

您应该更改函数的参数或发送列表而不是 JSON 数组。

public class SalesOrder {

    public static SalesOrder fromJSONObject(JSONObject o)
    {
        SalesOrder sa=new SalesOrder();
        sa.setOrderNumber(o.getString("order_number"));
        sa.setCustomerName(o.getString("customer_name"));
        sa.setOrder_files(o.getJSONArray("order_files"));
        return sa;

    }

    private String orderNumber;
    private String customerName;

    JSONArray order_files;

    public JSONArray getOrder_files() {
        return order_files;
    }
    public void setOrder_files(JSONArray order_files) {
        this.order_files = order_files;
    }
}

【讨论】:

  • 谢谢。,我尝试将 JSONArray 转换为 ArrayList( Order_Files 列表)并传递给sa.setOrder_files(),而不是这种方法。但仍然收到错误。更新这些代码以及错误。
猜你喜欢
  • 2015-08-11
  • 1970-01-01
  • 2020-07-05
  • 1970-01-01
  • 2019-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-05
相关资源
最近更新 更多