JSONObject 文本必须以"{"错误开头



我想从以下正文中获取"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();
    }

相关内容

最新更新