【问题标题】:Inconsistency in loading multi layered Json file from android studio从android studio加载多层Json文件不一致
【发布时间】:2019-03-06 07:56:14
【问题描述】:

我是使用 json 文件的新手,我已经构建了一个分层的 json 对象,我正在尝试在 android studio Toast 中显示这些值,但其中一些值很关键,我不希望它们显示出来,但它们正在显示在此过程中,请指导您做错了什么

这是 json 文件的一部分(json 数组中的单个对象)

 {
    "county": "Nyeri",
    "subcounty": ["Kieni East", [{
        "ward": ["funny", [{
            "policestation": ["null"]
        }], "kkkkk", [{
            "policestation": ["null"]
        }]]
    }], "Kieni West", [{
        "ward": "null"
    }], "Mathira East", [{
        "ward": ["Magutu", [{
            "policestation": ["Magutu", [{
                "arbitrator": ["null"]
            }], "Magutu ps", [{
                "arbitrator": ["null"]
            }], "Kagochi PS", [{
                "arbitrator": ["null"]
            }]]
        }], "Iriani", [{
            "policestation": ["null"]
        }], "Konyu", [{
            "policestation": ["null"]
        }], "Kirimukuyu", [{
            "policestation": ["null"]
        }], "Karatina Town", [{
            "policestation": ["Kagochi PS", [{
                "arbitrator": ["null"]
            }], "Gitunduti PS", [{
                "arbitrator": ["christopher bundi", "silvester kasanga"]
            }]]
        }]]
    }], "Mukurweini", [{
        "ward": "null"
    }], "Tetu", [{
        "ward": ["rulie", [{
            "policestation": ["null"]
        }]]
    }]]
 }

这是代码并试图通过排除病房列表的键来访问子县

  try {
  JSONArray jsonArray = new JSONArray (response);

 for (int i = 0; i < jsonArray.length (); i++) {
   JSONObject jsonObject = jsonArray.getJSONObject (i);

  String subcounty = jsonObject.getString ("subcounty");
  Toast.makeText (getApplicationContext (), subcounty, Toast.LENGTH_LONG).show ();}//close try and catch follows

挑战在于选择子县值,排除那些对病房至关重要的值。 感谢您提供支持

【问题讨论】:

  • JSON 格式不正确,JSON 数组的第一个元素是字符串,第二个元素是 JSONArray
  • 我应该如何构建 json 以实现......它下面的县的印象,列出其中的子县......然后为每个子县列出其中的病房,依此类推。感谢您提供支持
  • 您可以在 Json 数组中添加 Json 对象,并且 1 个子对象可以包含 name:"country name", sub:[array of sub countries] 例如 [{"name":"Kieni East", "病房": ["sub1","sub2","sub3"] },{"name":"Kieni West", "病房": ["subWest1","subWest2","subWest3"] }]
  • 我希望你知道 JSON 是如何工作的,每个 {} 代表一个对象,[] 代表数组。对象包含值对,即键:值。更多详情w3schools.com/js/js_json_intro.asp
  • 感谢 hfarhanahmed 先生正在研究这样的结构,我会提供反馈

标签: android json


【解决方案1】:

通过将数组修改为正确的格式,即 [{ “县”:“蒙巴萨”, “子县”:[{ “subcountyname”:“mtwapa”, “病房”:[{ “病房名”:“有趣”, “警察局”: [{ "stationame": "Magutu ps", “仲裁员”:[{ “仲裁员姓名”:“克里斯托弗·邦迪” }] }] }] }, { “subcountyname”:“likoni”, “病房”:[{ “病房名”:“空” }] }, { "subcountyname": "hihi", “病房”:[{ “病房名”:“空” }] }, { “子县名”:“曼波”, “病房”:[{ “病房名”:“空” }] }] }, { “县”:“夸莱”, “子县”:[{ “子县名”:“空” }] }] 然后我可以通过循环访问数组中的数据 通过初始数组中的对象。 在这个级别与对象子县,我可以在其中获取数组,,,获取该数组中的对象子县名称等等为了更清楚,请参阅Parsing JSON array and object in Android

【讨论】:

    【解决方案2】:

    使用下面的代码和JsonFormat,希望对你有帮助。

    String response = "[{"name":"Country 1", "subs": ["sub1","sub2","sub3"] },{"name":"Country 2", "subs": ["subWest1","subWest2","subWest3"] }]";
            try{
                JSONArray mainList = new JSONArray(response);
                ArrayList<String>   countries   =   new ArrayList<>();
                ArrayList<String>   subs   =   new ArrayList<>();
    
                for (int a=0;a<mainList.length();a++){
                    JSONObject object=mainList.getJSONObject(a);
                    countries.add(object.getString("name"));
                    subs.add(object.getString("subs"));
                }
    
                setAdapterForCountries(countries);
            }catch(JSONException e){
                e.printStackTrace();
            }
    

    在项目选择回调上执行此操作

    ////On Item Select
                JSONArray   subCountries    =   new JSONArray(subs.get(selectedItemPosition));
                setSubCountiresAdapter(subCountries);
    

    这就是您从 JSONArray 中获取字符串列表的方式。

    private void setSubCountiresAdapter(JSONArray   subs){
        ArrayList<String>   subsNames   =   new ArrayList<>();
        for (int a=0;a<subs.length();a++){
            try {
                subsNames.add(subs.getString(a));
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-04-19
      • 2017-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-22
      • 1970-01-01
      相关资源
      最近更新 更多