如何获取json数组的子节点的值 [英] How to get the value of a child node of a json array

查看:892
本文介绍了如何获取json数组的子节点的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请我在解析此链接中的数据列表时遇到一些问题(

please i am having some issues parsing a list of data form the this link(https://gnews.io/api/v3/top-news?&token=dd21eb88599ccb3411eaad9b314cde23) i am able to get the data from the json array(articles) but how can i get the data from the josn array(sources)

    private void getWebApiData() {
        String WebDataUrl = "https://gnews.io/api/v3/top-news?&token=dd21eb88599ccb3411eaad9b314cde23";
        new AsyncHttpTask.execute(WebDataUrl);
    }

    @SuppressLint("StaticFieldLeak")
    public class AsyncHttpTask extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... urls) {
            String result = "";

            URL url;
            HttpsURLConnection urlConnection = null;
            try {
                url = new URL(urls[0]);
                urlConnection = (HttpsURLConnection) url.openConnection();
                if (result != null) {
                    String response = streamToString(urlConnection.getInputStream());
                    parseResult(response);
                    return result;
                }
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(String result) {
            if (result != null) {
                newsAdapter = new NewsAdapter(getActivity(), newsClassList);
                listView.setAdapter(newsAdapter);
                Toast.makeText(getContext(), "Data Loaded Successfully", Toast.LENGTH_SHORT).show();

            } else {
                Toast.makeText(getContext(), "Failed to load data!", Toast.LENGTH_SHORT).show();
            }
            progressBar.setVisibility(View.GONE);
        }
    }

    private String streamToString(InputStream stream) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(stream));
        String line;
        String result = "";
        while ((line = bufferedReader.readLine()) != null) {
            result += line;
        }

        // Close stream
        if (null != stream) {
            stream.close();
        }
        return result;
    }


    private void parseResult(String result) {
        try {
            JSONObject response = new JSONObject(result);
            JSONObject response2 = response.getJSONObject("articles");
            NewsClass newsClass;
            for (int i = 0; i < newsClass.length(); i++) {
                JSONObject post = newsClass.optJSONObject(i);
                String name = post.optString("name");
                newsClass = new newsClass();
                newsClass.setNews_Name(name);
                artistClassList.add(newsClass);
            }

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

这是我正在使用的代码,用于获取文章的数据. 获取我尝试过的来源

This is code I am using the get the data of the articles. To get the sources I have tried

    private void parseResult(String result) {
        try {
            JSONObject response = new JSONObject(result);
            JSONObject response2 = response.getJSONArray("articles");
            JSONObject response3 = response2.getJSONObject("sources");
            NewsClass newsClass;
            for (int i = 0; i < newsClass.length(); i++) {
                JSONObject post = newsClass.optJSONObject(i);
                String name = post.optString("name");
                newsClass = new newsClass();
                newsClass.setNews_Name(name);
                artistClassList.add(newsClass);
            }

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

但是我认为我没有正确获取代码

But I think I am not getting the code correctly

这是我尝试过的第二个选择

Here is the second option I have tried

    private void parseResult(String result) {
        try {
            JSONObject response = new JSONObject(result);

            JSONObject response = response2.getJSONObject("sources");
            NewsClass newsClass;
            for (int i = 0; i < newsClass.length(); i++) {
                JSONObject post = newsClass.optJSONObject(i);
                String name = post.optString("name");
                newsClass = new newsClass();
                newsClass.setNews_Name(name);
                artistClassList.add(newsClass);
            }

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

但这仅给我空文本字段填充了数据的空格,但为空白 请任何帮助将不胜感激

But this only gives me empty text Fields the spaces for the data is populated but it is blank Please any help will be greatly appreciated

推荐答案

我不知道您的代码如何工作.您已尝试将JSONObject作为文章来获取,而实际上是JSONArray.除此之外,我没有在您的json中找到任何 key ,例如来源,而是找到了来源.要解析来源,请尝试以下方式:

I don't know how your code works. You have tried to get JSONObject as articles which is actually JSONArray. Besides this I don't find any key in your json like sources instead I have found source. To parse source try below way:

try {
    JSONObject jsonObject = new JSONObject(result);
    JSONArray jsonArray = jsonObject.getJSONArray("articles");

    for(int i = 0; i < jsonArray.length(); i++) {
        JSONObject articleObject = jsonArray.getJSONObject(i);
        JSONObject sourceObject = articleObject.getJSONObject("source");

        String name = sourceObject.optString("name");
        String url = sourceObject.optString("url");
    }
} catch (JSONException e) {
    e.printStackTrace();
}

这篇关于如何获取json数组的子节点的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆