【发布时间】:2017-05-15 13:01:03
【问题描述】:
我想从以下正文中获取“名称”的值:
[
{
"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, \n\t \"field_description\": \"UAT User name\"\n
},\n {\n \"field_name\":\"user_prod\",\n
\"field_type\":\"string\",\n \"field_required\":false, \n\t
\"field_description\": \"Production User name\"\n },\n {\n
\"field_name\":\"folder\",\n \"field_type\":\"string\",\n
\"field_required\":true, \n\t \"field_description\": \"Folder\"\n },\n
{\n \"field_name\":\"address_UAT\",\n \"field_type\":\"string\",\n
\"field_required\":true, \n\t \"field_description\": \"UAT address\"\n
},\n {\n \"field_name\":\"address_PROD\",\n
\"field_type\":\"string\",\n \"field_required\":false, \n\t
\"field_description\": \"Production address\"\n },\n {\n
\"field_name\":\"port\",\n \"field_type\":\"integer\",\n
\"field_required\":true, \n\t \"field_description\": \"Port\"\n },\n
{\n \"field_name\":\"protocol_version\",\n
\"field_type\":\"version\",\n \"field_required\":false, \n\t
\"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 文本必须以 '{' 错误开头。我想提取“名称”的值。有人可以帮我吗?
【问题讨论】:
-
由于外括号是方括号,也许您应该使用 JSONArray,而不是 JSONObject。或者您可以删除外部 []。
-
您的输入是一个包含两个 JSONObjects 的 JSONArray
-
正如已经指出的那样:您正在尝试将 array 解析为 object ,因此解析器会抱怨。因此,您最好按照 Henry 的建议将数组解析为数组(即 JSONArray),然后对该数组的元素进行操作。
-
JSON 无效。尝试使用一些 JSON 验证器。
-
@MehrajMalik:我怀疑这只是将其粘贴到问题中的人工制品,但是是的,H.Avram - 如果我们将该 JSON 复制并粘贴到验证器中,它会失败。您似乎已经将实际的 JSON 与其完整的字符串表示形式结合在一起,包括
\n和\t。