【问题标题】:Android: parsing JSONArray key with iteratorAndroid:使用迭代器解析 JSONArray 键
【发布时间】:2018-09-01 13:13:43
【问题描述】:

我正在尝试从 JSONArray 解析一个键:

{
    "server": [
       {
         "id": "1",
         "name": "Steve",
         "email": "test@gmail.com",
         "phone": "1001001000"
       }

    ]
}

因为 idnameemailphone 的键可以动态更改,我们必须在不教授键值的情况下解析结果。也就是说,系统必须同时解析键和值。所以我认为获取一个数组并使用 iterator.hasNext() 将解决问题。

 JSONObject jsonObject = new JSONObject(stringBuilder.toString().trim());
            JSONArray jsonArray = jsonObject.getJSONArray("server");
            for (int current = 0; current < jsonArray.length(); current++){
                JSONObject json_object = jsonArray.getJSONObject(current);
                Iterator iterator = json_object.keys();
                while (iterator.hasNext()){
                    hashMap.put(iterator.next().toString(), json_object.getString(iterator.next().toString()));
                }
            }

把迭代器改成jsonObject.keys()还是json_object.keys()都不能正常工作,只解析的key值“id”,无法解析姓名、电子邮件、电话。

这就是我获取 JSON 文件的方式:

$result = mysqli_query($conn, $sql);
$data = array();
if ($result){
     while($row=mysqli_fetch_array($result)){
        array_push($data,
            array('id'=>$row[1],
            'name'=>$row[2],
            'email'=>$row[3],
            'phone'=>$row[4]
        ));
 }
header('Content-Type: application/json; charset=utf8');
$json = json_encode(array("server"=>$data), JSON_PRETTY_PRINT+JSON_UNESCAPED_UNICODE);
echo $json;

【问题讨论】:

  • 它无效的 json 格式在这里检查它jsonlint.com
  • 我认为它与 PHP 无关
  • @NileshRathod 它是有效的 json(仅缺少,
  • @AlivetoDie 你的意思是在 "id": "1" 后面应该有 ","?
  • yes 在每个需要的逗号之后。我认为这只是编辑错误

标签: android json


【解决方案1】:

试试这个

    JSONObject jsonObject = null;
    try {
        jsonObject = new JSONObject(loadJSONFromAsset());
        JSONArray jsonArray = jsonObject.getJSONArray("server");
        for (int current = 0; current < jsonArray.length(); current++){
            JSONObject json_object = jsonArray.getJSONObject(current);
            Iterator iterator = json_object.keys();

            while( iterator.hasNext() ) {

                String key = (String)iterator.next();
                if ( json_object.get(key) instanceof String ) {
                    hashMap.put(key, json_object.getString(key));
                }
            }
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }

    Log.e("OUTPUT", Arrays.asList(hashMap).toString());

输出

【讨论】:

  • 我只得到 id=1,有什么问题?
  • @Mium 没找到你
  • 我只得到一个输出,而不是完整的结果。
  • 使用 stringbuilder.toString() 获取 JSONObject 会不会有问题?
  • 解决了!感谢您的帮助!
猜你喜欢
  • 2016-08-12
  • 1970-01-01
  • 2017-08-13
  • 2016-08-17
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多