【问题标题】:Name not found Fetching JSON, Android未找到名称获取 JSON,Android
【发布时间】:2019-05-12 16:21:50
【问题描述】:

运行此代码以获取 JSON 时,我收到“org.json.JSONException: No value for name”。然而,当我使用:(https://api.myjson.com/bins/j5f6b),一个测试 JSON URL 时,它给了我想要的输出。

已尝试在某些地方将其更改为 JSON 对象,但没有帮助。

public class fetchData extends AsyncTask<Void,Void,Void> {
String data ="";
String dataParsed = "";
String singleParsed ="";
@Override
protected Void doInBackground(Void... voids) {
    try {
        URL url = new URL("http://www.free-map.org.uk/fm/ws/bsvr.php?bbox=-0.73,51.04,-0.71,51.06&way=highway&format=json");
        HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
        InputStream inputStream = httpURLConnection.getInputStream();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        String line = "";
        while(line != null){
            line = bufferedReader.readLine();
            data = data + line;
        }

        JSONObject jsonObject = new JSONObject(data);
        JSONArray JA = jsonObject.getJSONArray("features");
        for (int i = 0; i < JA.length(); i++) {
            JSONObject JO = (JSONObject) JA.get(i);
            singleParsed =  "name:" + JO.get("name") + "\n";
            dataParsed = dataParsed + singleParsed +"\n" ;

            System.out.print(JO);
        }



    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (JSONException e) {
        e.printStackTrace();
    }

    return null;
}


protected void onPostExecute(Void aVoid) {
    super.onPostExecute(aVoid);

    twod.data.setText(this.dataParsed);

}

预期结果:名称输出实际结果:org.json.JSONException:名称无值

【问题讨论】:

    标签: java android json org.json


    【解决方案1】:

    属性名称在属性对象内。因此,要访问名称首先获取属性 JSON 对象并使用它。

        JSONArray JA = jsonObject.getJSONArray("features");
        for (int i = 0; i < JA.length(); i++) {
            JSONObject JO = (JSONObject) JA.get(i);
            singleParsed =  "name:" + JO.getJSONObject("properties").get("name") + "\n"; // add .getJSONObject("properties")
            dataParsed = dataParsed + singleParsed +"\n" ;
    
            System.out.print(JO);
        }
    

    【讨论】:

    • 它仍然产生同样的错误 org.json.JSONException: No value for name。任何想法
    • 没关系,它有效,但只会给我一个名字。知道如何获得所有名称吗?
    • 您的 JSON 文件不一致。它在所有属性对象中都没有 name 属性。这就是为什么它只给出一个名字并抛出异常
    猜你喜欢
    • 2017-07-06
    • 1970-01-01
    • 2010-10-23
    • 2016-10-23
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多