在尝试解析 JSON 数据 W/System.err 时出现此错误:org.json.JSONException:对客户没有价值
Posted
技术标签:
【中文标题】在尝试解析 JSON 数据 W/System.err 时出现此错误:org.json.JSONException:对客户没有价值【英文标题】:Getting this error whilt trying to parse JSON data W/System.err: org.json.JSONException: No value for customers 【发布时间】:2019-12-19 23:24:48 【问题描述】:我正在尝试从我的 rest api 中检索客户对象。我使用spring data jpa生成了api。我已经使用 volley 从 api 中检索信息。我不知道我做错了什么。由于我是android新手,所以我没有太多想法。有人可以帮我从我的 Json api 解析客户对象吗?
我的 api 看起来像这样:
"_embedded":
"customers": [
"firstName": "Alexander",
"lastName": "arnold",
"email": "trentarnold@liverpool.com",
"password": "cornertakenquickly",
"_links":
"self":
"href": "http://localhost:8080/api/customers/1"
,
"customer":
"href": "http://localhost:8080/api/customers/1"
,
"firstName": "test",
"lastName": "tester",
"email": "dulalsujan911@gmail.com",
"password": "12345678",
"_links":
"self":
"href": "http://localhost:8080/api/customers/2"
,
"customer":
"href": "http://localhost:8080/api/customers/2"
]
,
"_links":
"self":
"href": "http://localhost:8080/api/customers?page,size,sort",
"templated": true
,
"profile":
"href": "http://localhost:8080/api/profile/customers"
,
"page":
"size": 20,
"totalElements": 2,
"totalPages": 1,
"number": 0
我的代码看起来像这样我正在使用 volley:
// connects to the api and stores the retrived JSON values in the respective list
public void connectToApi()
// initialize lists
emailList = new ArrayList<>();
passwordList = new ArrayList<>();
final String BASE_URL ="http://192.168.1.67:8080/api/customers";
// final String BASE_URL ="http://10.0.2.2:8080/api/customers";
// creating a request ques for HTTP request
RequestQueue requestQueue = Volley.newRequestQueue(this);
// Setting HTTP GET request to retrieve the data from the SERVER
JsonObjectRequest objectRequest = new JsonObjectRequest(Request.Method.GET,BASE_URL
,null
, new Response.Listener<JSONObject>()
@Override
public void onResponse(JSONObject response)
try
JSONArray jsonArray = response.getJSONArray("customers");
for(int i=0; i<jsonArray.length();i++)
JSONObject customer = jsonArray.getJSONObject(i);
emailList.add(customer.getString("email"));
passwordList.add(customer.getString("password"));
catch (Exception e)
e.printStackTrace();
, new Response.ErrorListener()
@Override
public void onErrorResponse(VolleyError error)
Log.e("REST error",error.toString() );
);
requestQueue.add(objectRequest);
【问题讨论】:
如果你在 response.getJSONArray("customers"); 上停止调试器;行“响应”包含什么? 您能否调试并检查您是否收到响应或错误? ("_embedded":"customers":"firstName":"Alexander","lastName":"arnold","email") 这就是它所包含的内容 【参考方案1】:这样做:
@Override
public void onResponse(JSONObject response)
try
JSONObject json = new JSONObject(response);
JSONObject json_embedded = json.getJSONObject("_embedded");// need to access JSONObject("_embedded")
JSONArray jsonArray = json_embedded.getJSONArray("customers"); // then get JSONARRAY
for(int i=0; i<jsonArray.length();i++)
JSONObject customer = jsonArray.getJSONObject(i);
emailList.add(customer.getString("email"));
passwordList.add(customer.getString("password"));
catch (Exception e)
e.printStackTrace();
注意:您的 json 数组 (customers) 在 _embedded 中,这就是为什么 它显示异常。
【讨论】:
【参考方案2】:你需要先访问_embedded
对象。
try
JSONObject embedded = response.getJSONObject("_embedded");
JSONArray jsonArray = embedded.getJSONArray("customers");
for(int i=0; i<jsonArray.length();i++)
JSONObject customer = jsonArray.getJSONObject(i);
emailList.add(customer.getString("email"));
passwordList.add(customer.getString("password"));
catch (Exception e)
e.printStackTrace();
【讨论】:
@javaNoob 接受答案,所以其他人不会尝试以上是关于在尝试解析 JSON 数据 W/System.err 时出现此错误:org.json.JSONException:对客户没有价值的主要内容,如果未能解决你的问题,请参考以下文章
在尝试解析 JSON 数据 W/System.err 时出现此错误:org.json.JSONException:对客户没有价值