【问题标题】:How to get rid of the error: JSONArray[0] is not a JSONObject如何摆脱错误:JSONArray[0] is not a JSONObject
【发布时间】:2013-10-09 19:34:27
【问题描述】:

得到错误,JSONArray[0] 不是 JSONObject,同时从 JSON 数组中获取对象(Java 代码行 #5)。

客户端的jQuery

function setCosting(){
        var costingArray = {};
        costingArray = getCostingArray();
        var costingData = JSON.stringify(costingArray);
        alert(costingData);
        $.ajax({
            type:"POST",
            url:"/costApp/budgetline.do?action=setCosting",
            data:{"costingData": costingData},
            datatype:'json',
            success: function (msg) {
                if (msg) {
                    alert('success');
                }
            },
            error: function (msg) {
                alert('error');
            }

        });
    function getCostingArray() {
        var rows = $("table tbody tr");
        var dataset = [];
        rows.each(function(i, row){
            var rowset = {};
            var $row = $(row);
            rowset['travelType'] = $row.find('#travelType').val();
            rowset['staff'] = $row.find('#staff').val();
            rowset['trip'] = $row.find('#trip').val();
            dataset.push(rowset);
        });

        return dataset;
    }

    $('#save').click(function() {
        setCosting();
    });

Java 代码

Map mpVal = request.getParameterMap();    
JSONObject rootObj = new JSONObject(mpVal);
        JSONArray arrayObj = rootObj.getJSONArray("costingData");
        for(int m=0; m<arrayObj.length(); m++){
            **JSONObject costing = arrayObj.getJSONObject(m);**
            System.out.println(costing.getInt("travelType"));
            System.out.println(costing.getInt("staff"));
            System.out.println(costing.getInt("trip"));
        }

数组包含一个元素,其值为:

[
    {
        "travelType": "1",
        "staff": "red",
        "trip": ""
    },
    {
        "travelType": "2",
        "staff": "blue",
        "trip": ""
    },
    {
        "travelType": "3",
        "staff": "green",
        "trip": ""
    }
]

任何意见将不胜感激。

【问题讨论】:

  • 你能检查一下这是不是真的arrayObj.get(m) instanceof JSONObject
  • 您能否添加mpVal JSON 的样子,我假设您显示的JSON 是arrayObj JSONArray
  • 已检查。 arrayObj 是 JSONObject 的实例
  • 数组包含3个元素!访问 json.org 并学习 JSON 语法——学习只需 5-10 分钟。
  • 在你对它做任何事情之前打印出原始的 JSON 字符串。

标签: java json


【解决方案1】:

由于该数组包含一个元素,其值本身就是一个数组,因此您需要

JSONArray arrayObj = rootObj.getJSONArray("costingData").getJSONArray(0);
for(int m=0; m<arrayObj.length(); m++){
    JSONObject costing = arrayObj.getJSONObject(m);
    System.out.println(costing.getString("travelType"));
    System.out.println(costing.getString("staff"));
    System.out.println(costing.getString("trip"));
}

而且,由于stafftrip 是字符串,您需要使用getString() 而不是getInt()

【讨论】:

  • 现在,在附加 getJSONArray(0) 后,我在第 3 行遇到了同样的错误
  • @SERICONBANG 请分享完整的 JSON。结构不够清晰。
  • 谢谢。发布了完整的 JSON
猜你喜欢
  • 1970-01-01
  • 2019-11-20
  • 1970-01-01
  • 2017-09-17
  • 1970-01-01
  • 2016-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多