我首先要为我使用的术语道歉,因为我对使用Json对象和数组相当陌生。
我搜索了各种可以从Json对象中提取数据的示例,但没有一个类似于我所处的情况。我试图提取字符串“Plan A(经济计划)”,“B计划(豪华计划)“和”计划C(斋月)“来自以下Json:
{
"status": "success",
"data": {
"1:Plan A (Economy Plan)": [{
"idscheme": "49",
"plan_name": "1",
"plan_id": "ABS-772",
"term": "8",
"payment": "1000",
"amount": "8000",
"expected_amount": null,
"added_by": "2",
"updated_on": "2017-09-27"
}, {
"idscheme": "50",
"plan_name": "1",
"plan_id": "ABS-773",
"term": "8",
"payment": "2000",
"amount": "16000",
"expected_amount": null,
"added_by": "1",
"updated_on": "2017-09-28"
}, {
"idscheme": "48",
"plan_name": "1",
"plan_id": "ABS-762",
"term": "7",
"payment": "4000",
"amount": "28000",
"expected_amount": null,
"added_by": "1",
"updated_on": "2017-09-28"
}],
"2:Plan B (Deluxe Plan)": [{
"idscheme": "33",
"plan_name": "2",
"plan_id": "ABS-486",
"term": "8",
"payment": "2000",
"amount": "16000",
"expected_amount": null,
"added_by": "2",
"updated_on": "2017-09-27"
}, {
"idscheme": "47",
"plan_name": "2",
"plan_id": "ABS-831",
"term": "7",
"payment": "3000",
"amount": "21000",
"expected_amount": null,
"added_by": "2",
"updated_on": "2017-09-27"
}, {
"idscheme": "46",
"plan_name": "2",
"plan_id": "ABS-776",
"term": "7",
"payment": "4000",
"amount": "28000",
"expected_amount": null,
"added_by": "2",
"updated_on": "2017-09-27"
}],
"5:Plan C (Ramadan)": [{
"idscheme": "51",
"plan_name": "5",
"plan_id": "ABS-865",
"term": "7",
"payment": "3000",
"amount": "21000",
"expected_amount": null,
"added_by": "42",
"updated_on": "2017-10-15"
}, {
"idscheme": "52",
"plan_name": "5",
"plan_id": "ABS-389",
"term": "8",
"payment": "4000",
"amount": "32000",
"expected_amount": null,
"added_by": "42",
"updated_on": "2017-10-15"
}, {
"idscheme": "53",
"plan_name": "5",
"plan_id": "ABS-451",
"term": "8",
"payment": "5000",
"amount": "40000",
"expected_amount": null,
"added_by": "42",
"updated_on": "2017-10-15"
}]
},
"plancount": 3
}
这个想法是这个Json对象是使用API创建的,我想动态地将不同的“计划”放在Android的微调器中。目前我已经将值硬编码到微调器中,但是这些计划可以改变,我不想每次都对它进行硬编码。
Json对象的格式与平常略有不同,因为API是以这种方式构建的,有没有办法提取不同的计划而不必更改API,因为这需要更多的工作?< / p>
以下是我为实现这一目标而采取的步骤:
jsonObject.getString("status").equals("success")
非常感谢您的帮助,如果您想要在帖子中包含任何更改或事项,请告知我们。
答案 0 :(得分:0)
您可以将gson用于此目的:
Gson gson = new Gson();
YourPojoOfJson yourObjectOfPojo = gson.fromJson(jsonObject,YourPojoOfJson .class);
为了让你的json的pojo去: http://www.jsonschema2pojo.org/
将json复制到那里,从右侧面板中选择json,然后选择没有。 之后你必须点击预览它会显示几个类。修改这些类来制作你的json的对象。一旦你拥有了你的类的对象,那么yu可以通过调用object和使用get属性获得任何值。
答案 1 :(得分:0)
您可以使用Retrofit(http://square.github.io/retrofit/)发送异步HTTP POST请求并将响应转换为pojo。
示例:
@FormUrlEncoded
@POST("user/edit")
Call<User> updateUser(@Field("first_name") String first, @Field("last_name") String last);
答案 2 :(得分:0)
我没有足够的声誉来写评论所以我会告诉你我的笔记:
“data”必须是jsonArray来实现你想要的,所以你可以简单地迭代它,但“data”现在是jsonObject并且有这三个计划,你必须知道它们中的每个键。 简而言之,制作“数据”JsonArray而不是jsonObject或者给你这个API的人告诉他改变它并且很容易迭代它
答案 3 :(得分:0)
非常感谢回应家伙。我想发布我最终做的事情,因为我对Gson,Pojo,Retrofit等缺乏经验。希望我能深入挖掘并学习如何使用这些东西。无论如何,我将Json对象转换为字符串,然后使用Pattern编译器提取我需要的字符串。然后我将它们放在一个名为plans的ArrayList中。
String temp = jsonObject.getJSONObject("data").toString();
Pattern p = Pattern.compile("\"(.*?)\":\\[");
Matcher m = p.matcher(temp);
m.find();
plans.add(m.group(1));
p = Pattern.compile("],\"(.*?)\":\\[");
m = p.matcher(temp);
while (m.find()){
plans.add(m.group(1));
}
status = true;
return plans;
如果要添加更多计划,这是完美的,因此这是我坚持的解决方法,直到我找到更好的方法。