【问题标题】:What is the right way of returning a JSON array?返回 JSON 数组的正确方法是什么?
【发布时间】:2016-11-05 19:38:47
【问题描述】:

我有一个返回 JSON 数组的方法,这是我的方法

 public net.sf.json.JSONArray getquery(QueryBuilderRequestHelper helper) {
     //logger.log(Level.INFO, " ############### getquery ###############  ");
        net.sf.json.JSONObject jObject = new net.sf.json.JSONObject();
        net.sf.json.JSONArray jArray = new net.sf.json.JSONArray();
        net.sf.json.JSONObject tempJsonObject = null;
        QueryBuilderJpaController builderJpaController = new QueryBuilderJpaController();
        try {
            tempJsonObject =new net.sf.json.JSONObject();
            QueryBuilder builder=builderJpaController.findByqueryId(Integer.parseInt(helper.getQueryId()));
            String outputFields=builder.getOutputFields();
            String qbCondition=builder.getQbCondition();
            tempJsonObject.put("qbCondition", qbCondition = qbCondition.replaceAll("^\"|\"$", ""));

             jArray.add(tempJsonObject);
             List<String> list = new ArrayList<String>();
             list = (List<String>) net.sf.json.JSONArray.toCollection(net.sf.json.JSONArray.fromObject(outputFields));
             for (String string : list) {

                tempJsonObject.put("outputFields", string);
                jArray.add(tempJsonObject);
            }
            List<QueryBuilderCondition>  tbdAnsList = builderJpaController.getQueryBuilderConditionByQueyId(Integer.valueOf(Integer.parseInt(helper.getQueryId())));
         for (QueryBuilderCondition queryBuilderCondition : tbdAnsList) {

             tempJsonObject.put("fieldId", queryBuilderCondition.getFieldId());
             tempJsonObject.put("operator", queryBuilderCondition.getOperator());
             tempJsonObject.put("fieldValue", queryBuilderCondition.getFieldValue());
             jArray.add(tempJsonObject);
            }

        }catch(Exception e){
            e.printStackTrace();
        }
        return jArray;
 }

如果正确,请告诉我这是返回 JSON 数组的正确方法,请在像 javascript 这样的 javascript 上进行迭代时告知

success: function(data) {

        for(var i in data)
        {   
             var qbCondition = data.qbCondition;
             console.log("======qbCondition is =="+JSON.stringify(qbCondition))
             var outputFields = data[i].outputFields;
             console.log("======outputFields is =="+JSON.stringify(outputFields))
             var fieldId = data[i].fieldId;
             console.log("======fieldId is =="+JSON.stringify(fieldId))
             var operator = data[i].operator;
             console.log("======operator is =="+JSON.stringify(operator))
             var fieldValue = data[i].fieldValue;
             console.log("======fieldValue is =="+JSON.stringify(fieldValue))

        }

为什么我在第一次迭代中得到了 undefine.. 谢谢你

【问题讨论】:

    标签: java arrays json string collections


    【解决方案1】:

    我建议您返回一个字符串,该字符串与您的 java 方法中字符串化的 JSON 数组相对应。

    您的 json 可能如下所示:

    {"qbCondition":"myCondition", "data":[
        {"outputFields" : "myOutputFields1", "fieldId" : "fieldId1" },
        {"outputFields" : "myOutputFields2", "fieldId" : "fieldId"}
    ]}
    

    然后在 javascript 部分,您可以使用 JSON.parse(object) 检索 JSON 对象:

    success: function(response) {
        var jsonData = JSON.parse(response);
        var qbCondition = jsonData.qbCondition;
        console.log("======qbCondition is =="+qbCondition);
    
        // get your array and display index 0
        var myArr = jsonData.data;
        var outputFields = myArr[0].outputFields;
        console.log("======outputFields is=="+outputFields);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-08
      • 2021-10-30
      • 2019-12-30
      • 1970-01-01
      • 1970-01-01
      • 2018-08-12
      • 2011-04-26
      相关资源
      最近更新 更多