Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取json文件的键的值_Java_Android_Arrays_Json_Android Studio - Fatal编程技术网

Java 如何获取json文件的键的值

Java 如何获取json文件的键的值,java,android,arrays,json,android-studio,Java,Android,Arrays,Json,Android Studio,如何在Java中获取json键的值这里是我的代码 private void getWebApiData() { String WebDataUrl = "myjsonfileurl"; new AsyncHttpTask.execute(WebDataUrl); } @SuppressLint("StaticFieldLeak") public class AsyncHttpTask extends AsyncTask<St

如何在Java中获取json键的值这里是我的代码

    private void getWebApiData() {
        String WebDataUrl = "myjsonfileurl";
        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_GetWebData(String result) {
        try {
            JSONObject jsonObject = new JSONObject(result);
            JSONArray jsonArray = jsonObject.getJSONArray("books");

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

                String name = sourceObject.optString("name");

            }

        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
我想要的是如何获得字母A下的数据值,即Amazonite和Amethyst,以及字母B下的数据值,但我可以只给我空文本字段吗?没有填充任何数据。 我已尝试使用此代码,但值返回“null”

private void parseResult_GetWebData(字符串结果){
试一试{
JSONObject JSONObject=新JSONObject(结果);
JSONArray JSONArray=jsonObject.getJSONArray(“书籍”);
for(int i=0;i
我不确定您真正想要的是什么,但如果您只是想在OP下回复时得到“Amazonite and Amethyst”,您可以尝试以下方法:

代码片段

for (int i = 0; i < jsonArray.length(); i++) {
    JSONObject articleObject = jsonArray.getJSONObject(i);
    JSONArray jsonArrayA = articleObject.getJSONArray("A");

    for (int j = 0; j < jsonArrayA.length(); j++) {
        JSONObject obj = jsonArrayA.getJSONObject(j);
        System.out.println(obj.names());

        obj.names().forEach(e -> {
            System.out.println(obj.getJSONObject(e.toString()).get("name"));
        });
    }
}
控制台输出

for (int i = 0; i < jsonArray.length(); i++) {
    JSONObject articleObject = jsonArray.getJSONObject(i);
    JSONArray jsonArrayA = articleObject.getJSONArray("A");

    for (int j = 0; j < jsonArrayA.length(); j++) {
        JSONObject obj = jsonArrayA.getJSONObject(j);
        System.out.println(obj.names());

        obj.names().forEach(e -> {
            System.out.println(obj.getJSONObject(e.toString()).get("name"));
        });
    }
}
名称:Amazonite,内部名称:Amazonite
名称:紫水晶,内部名称:紫水晶
[亚马逊石,紫水晶]
[亚马逊石,紫水晶]


A
是一个JSON数组,所以您应该使用
articleObject.optJSONArray(“A”)
来代替。尝试了这个,但我得到了节点的完整字符串“[{“Amazonite”:{“name”:“Amazonite”,“image”:“www.google.com”},“Amethyst”:{“name”:“Amethyst”“,“image:”www.google.com“}}],“我想知道的是,关键是”Amazonite and Amethyst“,我只是指出为什么变量
name
得到
null
。我能够得到第一个结果,那就是”[“Amazonite”,“Amethyst”]“但是我想要的是第二个选项,将数据作为单独的字符串来获取,因为我在listview中填充它,所以我使用的是android studio,所以我需要的结果是一个字符串,而不是常规java中的system.out.printIn,而是一个lambda表达式”bj.names().forEach(e->{system.out.println(obj.getJSONObject(e.toString()).get(”名称“);};”为了精确起见,请在android中以字符串形式发布答案studio@Serenity你好我已经更新了我的帖子,但我仍然不确定你到底想要什么。谢谢,但我想要显示的只是Amazonite和Amethyst,而不是其中的全部数据。我用预期的方式编辑了我的问题result@Serenity更新,请检查!谢谢,但我只得到一个值,即“Amethyst”和“Amethyst”。第一个值不是填充的,只是重复相同的值。很抱歉给您带来不便
for (int i = 0; i < jsonArray.length(); i++) {
    JSONObject articleObject = jsonArray.getJSONObject(i);
    JSONArray jsonArrayA = articleObject.getJSONArray("A");

    for (int j = 0; j < jsonArrayA.length(); j++) {
        JSONObject obj = jsonArrayA.getJSONObject(j);
        System.out.println(obj.names());

        obj.names().forEach(e -> {
            System.out.println(obj.getJSONObject(e.toString()).get("name"));
        });
    }
}
List<String> names = new ArrayList<>();
List<String> innerNames = new ArrayList<>();
for (int j = 0; j < jsonArrayA.length(); j++) {
    JSONObject obj = jsonArrayA.getJSONObject(j);
    JSONArray keys = obj.names();
    for (int k = 0; k < keys.length(); k++) {
        String name = keys.getString(k);
        String innerName = obj.getJSONObject(keys.optString(k)).getString("name");

        System.out.printf("name: %s, inner name: %s\n", name, innerName);

        names.add(name);
        innerNames.add(innerName);
    }
}
System.out.println(names.toString());
System.out.println(innerNames.toString());