【问题标题】:The type of the expression must be an array type but it resolved to JSONArray表达式的类型必须是数组类型,但它解析为 JSONArray
【发布时间】:2019-10-25 19:11:59
【问题描述】:

我正在获取一个 JSON 对象,然后将其转换为数组并尝试访问属性或值,但出现 The type of the expression must be an array type but it resolved to JSONArray 错误

我必须将 JSON 数据保存到我的数据库中,这就是为什么我要获取数组中的所有值

我的代码

protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    Scanner scanner = new Scanner(request.getInputStream());
    String imageData = scanner.nextLine();
    System.out.println(imageData);
    JSONObject jsonObj = new JSONObject(imageData);
    JSONArray jsonArray = jsonObj.getJSONArray("ImageData");

    JSONObject innerObj = new JSONObject(jsonArray[0]); // this one is throwing error 
    // eror is `The type of the expression must be an array type but it resolved to JSONArray`
    String counter = innerObj.getString("Counter");
    String name = innerObj.getString("Name");
    String isActive = innerObj.getString("IsActive");     
    System.out.println(counter);

}

System.out.println(imageData); it prints -->

{"ImageData":[{"Counter":"Counter A","Name":"CountA1.jpg","IsActive":"Y"},{"Counter":"Counter A","Name":"CountA2.jpg","IsActive":"Y"}]}

System.out.println(jsonArray);这个打印出来-->

[{"Counter":"Counter A","IsActive":"Y","Name":"CountA1.jpg"},{"Counter":"Counter A","IsActive":"Y","Name":"CountA2.jpg"}]

我已经在我的代码中注释了出现错误的行

【问题讨论】:

    标签: java json servlets


    【解决方案1】:

    不能像jsonArray[0]那样给JSONArray添加方括号,必须使用jsonArray.getJSONObject("index");

    【讨论】:

      【解决方案2】:

      使用getJSONObject方法

      JSONObject innerObj =  jsonArray.getJSONObject(0);
      

      返回 index 处的值(如果存在并且是 JSONObject)。

      【讨论】:

      • 这行得通,但String counter = innerObj.getString("Counter"); 只给计数器 A 我希望所有计数器 A、计数器 B 和 C 都是动态的
      • @viveksingh 可以循环遍历jsonArray
      • 我妈在做for(int i=0;i<jsonArray.length();i++) { JSONObject innerObj = jsonArray.getJSONObject(0); // this one is throwing error // eror is 表达式的类型必须是数组类型但解析为JSONArray` String counter = innerObj.getString("Counter");字符串名称 = innerObj.getString("Name"); String isActive = innerObj.getString("IsActive"); System.out.println(计数器); }` 但仍然获得两次 Counter A
      • 每次在这里打印计数器A 3次计数器A
      • @viveksingh 在循环中你需要将0 更改为i: JSONObject innerObj = jsonArray.getJSONObject(i);
      猜你喜欢
      • 1970-01-01
      • 2021-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-20
      • 1970-01-01
      • 2012-04-20
      • 2018-08-14
      相关资源
      最近更新 更多