【问题标题】:How to access multiple JSON lists in Javascript如何在 Javascript 中访问多个 JSON 列表
【发布时间】:2019-03-26 08:22:38
【问题描述】:

我有一个 Java servlet,它执行以下操作:

JSONObject jsonObject = new JSONObject();
JSONArray jsonArray = new JSONArray();
jsonObject.put("Status", status);
jsonObject.put("isActive", isActive);

jsonArray.add(jsonObject);
response.getWriter().write(jsonArray.toString());

//Now I have for loops here.

JSONArray jsonArray2 = new JSONArray();
for(int i=0;i<list.size();i++){
DTO dtost = list.get(i);
 JSONObject jsonObj = new JSONObject();
jsonObj.put("Label",dtost.getLabel());
jsonObj.put("UNID",dtost.getUNID());

jsonArray2.add(jsonObj); 
}

response.getWriter().write(jsonArray2.toString());

我正在获取此 JSON 数据,并想知道如何使其成为正确的 JSON 格式,并使用 Javascript 访问其中的值。

[{"Status":"Passed","isActive":"No"}] [{"Label":"MembershipCard","UNID":"01"},{"Label":"LoyaltyCard","UNID":"02"}]

我正在尝试以下 Javascript 代码 sn-p 但我没有检索到任何内容。

success: function(data) {

  alert(data[0].Status); // Nothing
}

谢谢。

【问题讨论】:

  • [{"Status":"Passed","isActive":"No"}] [{"Label":"MembershipCard","UNID":"01"},{"Label":"LoyaltyCard","UNID":"02"}] 不是有效的 json
  • 我在这里看不到与 Java 或 servlet 的关系。
  • 您的数据示例无效。基本上有 2 个 JSON 数组,而只有一个被认为是有效的 JSON
  • 嗨,我正在从 Java servlet 检索 Json 数据。

标签: javascript arrays json servlets


【解决方案1】:

上面提到的是一个无效的 JSON。 但是,如果我们将 JSON 修改为此 "[[{"Status":"Passed","isActive":"No"}], [{"Label":"MembershipCard","UNID":"01"},{"Label":" LoyaltyCard","UNID":"02"}]]" 那么它就是一个有效的 JSON。

所以要访问上述数据的状态参数是这样的:-

success: function(data){
alert(data[0][0].Status);
}

【讨论】:

  • 嗨@neeraj,我更新了我的代码,我将如何检索这种 JSON 结果?谢谢。
  • 所以基本上是 2 个数组 [{"Status":"Passed","isActive":"No"}] ** 和 **[{"Label":"MembershipCard", "UNID":"01"},{"Label":"LoyaltyCard","UNID":"02"}] 需要放在一个数组中以使其成为有效的 JSON。像这样-> [arr1,arr2]。所以它会为您生成我上面提到的 JSON 数据,然后您可以轻松访问它
【解决方案2】:

重构您的 java 代码以生成有效的 json 对象。 {"first":[{"Status":"Passed","isActive":"No"}],"second":[{"Label":"MembershipCard","UNID":"01"},{"Label":"LoyaltyCard","UNID":"02"}]}

JSONObject output= new JSONObject();
JSONObject jsonObject = new JSONObject();
JSONArray jsonArray = new JSONArray();
jsonObject.put("Status", status);
jsonObject.put("isActive", isActive);

jsonArray.add(jsonObject);
output.put("first", jsonArray);

//Now I have for loops here.

JSONArray jsonArray2 = new JSONArray();
for(int i=0;i<list.size();i++){
DTO dtost = list.get(i);
 JSONObject jsonObj = new JSONObject();
jsonObj.put("Label",dtost.getLabel());
jsonObj.put("UNID",dtost.getUNID());

jsonArray2.add(jsonObj); 
}
output.put("second", jsonArray2);
response.getWriter().write(output.toString());

【讨论】:

  • 您好,谢谢。我能够以以下格式检索数据:{"second":[{"Label":"MembershipCard","UNID":"01"}],{"first":[{"Status":"Passed","isActive":"No"}]} 请问我如何能够从 first 和 second 中检索数据?例如我想从第一个访问状态?
  • @Ragome - 假设您要获取键为状态的所有对象。 let pluckKeys = (input, key) =&gt; { if(!input){ return []; } return Object.keys(input).reduce((out,k) =&gt; { if(!input[k]){ return out; } let values = input[k]; if(values instanceof Array){ out = out.concat(values.filter((val) =&gt; { return val.hasOwnProperty(key); })); } return out; },[]); }; 。将 Java 代码的输出传递到此函数 - pluckKeys({"second":[{"Label":"MembershipCard","UNID":"01"}],{"first":[{"Status":"已通过","isActive":"否"}]},"状态");
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-11
  • 2020-12-26
  • 2015-04-20
  • 1970-01-01
相关资源
最近更新 更多