我想从以下正文中获取"name"的值:
[
{
"name": "ENTITY_CHANNELS",
"description": "The list of channels use to deliver through.",
"metadata": "{}"
},
{
"name": "INTAKE_SFTP",
"description": null,
"metadata": "{n "fields":[n {n
"field_name":"user_uat",n "field_type":"string",n
"field_required":true, nt "field_description": "UAT User name"n
},n {n "field_name":"user_prod",n
"field_type":"string",n "field_required":false, nt
"field_description": "Production User name"n },n {n
"field_name":"folder",n "field_type":"string",n
"field_required":true, nt "field_description": "Folder"n },n
{n "field_name":"address_UAT",n "field_type":"string",n
"field_required":true, nt "field_description": "UAT address"n
},n {n "field_name":"address_PROD",n
"field_type":"string",n "field_required":false, nt
"field_description": "Production address"n },n {n
"field_name":"port",n "field_type":"integer",n
"field_required":true, nt "field_description": "Port"n },n
{n "field_name":"protocol_version",n
"field_type":"version",n "field_required":false, nt
"field_description": "Protocol version"n }n ]n}"
}
]
我尝试了以下代码:
String settingsTypeData = response.body().toString();
JSONObject settingsTypeObject = new JSONObject(settingsTypeData);
Assert.assertEquals(settingsTypeObject.get("name"), "ENTITY_CHANNELS");
但是我不断收到错误:JSONObject文本必须以"{"错误开头。我想提取"名称"的值。有人可以帮助我吗?
谢谢大家的投入。我意识到我的错误是什么。我使用过:
String settingsTypeData = response.body().toString();
下面的代码将解决我的问题:
String settingsTypeData = response.body().string();
JSONArray settingsTypeArray = new JSONArray(settingsTypeData);
String firstSettingType = settingsTypeArray.getJSONObject(0).getString("name");
Assert.assertEquals(firstSettingType, "ENTITY_CHANNELS");
String secondSettingType = settingsTypeArray.getJSONObject(1).getString("name");
Assert.assertEquals(secondSettingType, "INTAKE_SFTP");
使用 JSONArray 而不是 JSONObject,因为上面的全 JSON 就是 JSONArray。然后迭代这个JSONArray并从每个JSONObject中获取名称
String settingsTypeData = response.body().toString();
try {
JSONArray settingsTypeArray = new JSONArray(settingsTypeData);
for(int i=0;i<settingsTypeArray.length();i++){
String name = settingsTypeArray.getJSONObject(i).getString("name");
Log.d(TAG, "onActivityResult: name = "+name);
}
} catch (JSONException jex){
jex.printStackTrace();
}