Java 如何获取json文件的键的值
如何在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
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());