返回JSON数组的正确方法是什么?

时间:2016-07-04 06:53:06

标签: java arrays json string collections

我有一个返回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上迭代时告诉

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 .. 谢谢

1 个答案:

答案 0 :(得分:0)

我建议你返回一个对应于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);
}
相关问题