Android:从 JSON 动态获取 JSON 数组键名
Android: Dynamically Get JSON Array Key Name From JSON
我有一个 json link,如果我们打开它,我会得到以下结果
{
"Status": "Success",
"All_Details": [{
"Types": "0",
"TotalPoints": "0",
"ExpiringToday": 0
}],
"First": [{
"id": "0",
"ImagePath": "http://first.example.png"
}],
"Second": [{
"id": "2",
"ImagePath": "http://second.example.png"
}],
"Third": [{
"id": "3",
"ImagePath": "http://third.example.png"
}],
}
我需要的是,我想动态获取所有键名,如状态、All_details、第一等
而且我还想获取 All_details 和第一个数组中的数据。
我使用了以下方法
@Override
public void onResponse(JSONObject response) throws JSONException {
VolleyLog.d(TAG, "Home Central OnResponse: " + response);
String statusStr = response.getString("Status");
Log.d(TAG, "Status: " + statusStr);
if (statusStr.equalsIgnoreCase("Success")) {
Iterator iterator = response.keys();
while (iterator.hasNext()) {
String key = (String)iterator.next();
}
}
}
我把get中的所有键名都存储在String键中。但是我无法打开获取 JSON 数组中的值,例如。我需要使用 String(Key) 获取第一个和第二个数组中的值。我该怎么做。???
一旦您使用您所做的操作提取了键,这样的事情将允许您迭代数组和单个字段。而不是 "Types" 使用您将在此之前创建的键变量。
JSONArray allDetails = response.getJsonArray("All_Details")
for (int i = 0 ; i < allDetails.length(); i++) {
JSONObject allDetail = allDetails.getJSONObject(i);
allDetails.getString("Types");
}
首先,要获取键名,您可以轻松地遍历 JSONObject 本身 as mentioned here:
Iterator<?> keys = response.keys();
while( keys.hasNext() ) {
String key = (String)keys.next();
if ( response.get(key) instanceof JSONObject ) {
System.out.println(key); // do whatever you want with it
}
}
然后,获取数组的值:
JSONArray arr = response.getJSONArray(key);
JSONObject element;
for(int i = 0; i < arr.length(); i++){
element = arr.getJSONObject(i); // which for example will be Types,TotalPoints,ExpiringToday in the case of the first array(All_Details)
}
如果您想从 response
JSON 对象中获取 JSON 数组,您可以使用 JSONArray
class. JSONObject
has a method to get a JSONArray
: getJSONArray(String)
。尝试此操作时请记住抓住 JSONException
。例如,如果没有密钥,将抛出此异常。
您的代码可能如下所示(仅 while 循环):
while (iterator.hasNext()) {
String key = (String)iterator.next();
try {
JSONArray array = response.getJSONArray(key);
// do some stuff with the array content
} catch(JSONException e) {
// handle the exception.
}
}
您可以使用 JSONArray
的方法从数组中获取值(参见文档)
首先,我想通知您,这不是有效的 JSON
。去掉最后的逗号(,)使其有效。
然后你可以像这里一样迭代
JSONArray myKeys = response.names();
试试这个
Iterator keys = jsonObject.keys();
while (keys.hasNext()) {
try {
String dynamicKey = (String) keys.next();//Your dynamic key
JSONObject item = jsonObject.getJSONObject(dynamicKey);//Your json object for that dynamic key
} catch (JSONException e) {
e.printStackTrace();
}
}
我有一个 json link,如果我们打开它,我会得到以下结果
{
"Status": "Success",
"All_Details": [{
"Types": "0",
"TotalPoints": "0",
"ExpiringToday": 0
}],
"First": [{
"id": "0",
"ImagePath": "http://first.example.png"
}],
"Second": [{
"id": "2",
"ImagePath": "http://second.example.png"
}],
"Third": [{
"id": "3",
"ImagePath": "http://third.example.png"
}],
}
我需要的是,我想动态获取所有键名,如状态、All_details、第一等
而且我还想获取 All_details 和第一个数组中的数据。 我使用了以下方法
@Override
public void onResponse(JSONObject response) throws JSONException {
VolleyLog.d(TAG, "Home Central OnResponse: " + response);
String statusStr = response.getString("Status");
Log.d(TAG, "Status: " + statusStr);
if (statusStr.equalsIgnoreCase("Success")) {
Iterator iterator = response.keys();
while (iterator.hasNext()) {
String key = (String)iterator.next();
}
}
}
我把get中的所有键名都存储在String键中。但是我无法打开获取 JSON 数组中的值,例如。我需要使用 String(Key) 获取第一个和第二个数组中的值。我该怎么做。???
一旦您使用您所做的操作提取了键,这样的事情将允许您迭代数组和单个字段。而不是 "Types" 使用您将在此之前创建的键变量。
JSONArray allDetails = response.getJsonArray("All_Details")
for (int i = 0 ; i < allDetails.length(); i++) {
JSONObject allDetail = allDetails.getJSONObject(i);
allDetails.getString("Types");
}
首先,要获取键名,您可以轻松地遍历 JSONObject 本身 as mentioned here:
Iterator<?> keys = response.keys();
while( keys.hasNext() ) {
String key = (String)keys.next();
if ( response.get(key) instanceof JSONObject ) {
System.out.println(key); // do whatever you want with it
}
}
然后,获取数组的值:
JSONArray arr = response.getJSONArray(key);
JSONObject element;
for(int i = 0; i < arr.length(); i++){
element = arr.getJSONObject(i); // which for example will be Types,TotalPoints,ExpiringToday in the case of the first array(All_Details)
}
如果您想从 response
JSON 对象中获取 JSON 数组,您可以使用 JSONArray
class. JSONObject
has a method to get a JSONArray
: getJSONArray(String)
。尝试此操作时请记住抓住 JSONException
。例如,如果没有密钥,将抛出此异常。
您的代码可能如下所示(仅 while 循环):
while (iterator.hasNext()) {
String key = (String)iterator.next();
try {
JSONArray array = response.getJSONArray(key);
// do some stuff with the array content
} catch(JSONException e) {
// handle the exception.
}
}
您可以使用 JSONArray
的方法从数组中获取值(参见文档)
首先,我想通知您,这不是有效的 JSON
。去掉最后的逗号(,)使其有效。
然后你可以像这里一样迭代
JSONArray myKeys = response.names();
试试这个
Iterator keys = jsonObject.keys();
while (keys.hasNext()) {
try {
String dynamicKey = (String) keys.next();//Your dynamic key
JSONObject item = jsonObject.getJSONObject(dynamicKey);//Your json object for that dynamic key
} catch (JSONException e) {
e.printStackTrace();
}
}