gpt4 book ai didi

java - 按条件用 JSON 定义组或元素填充 ArrayList>(尝试在 Android 中为可扩展列表创建数据)

转载 作者:行者123 更新时间:2023-11-30 00:06:48 26 4
gpt4 key购买 nike

我正在尝试在 Android (Java) 中创建一个可扩展列表。

问题:如何根据以下条件用JSON中的数据填充ArrayList of Services的ArrayList?

我使用 JSON 从 Google 表格中获取数据。在 gsheets 中,每一行都包含 NAME 和 PRICE。有些行的 PRICE 值为“空”,应被视为“Group Name”行。 PRICE 中带有“null”的行之后的所有行都是该组名称的“子项”,并且应该属于指定的组。分组继续,直到价格字段中为“空”的下一行。

    private void processJson(JSONObject object) {

try {
JSONArray rows = object.getJSONArray("rows");

for (int r = 1; r < rows.length(); ++r) {
JSONObject row = rows.getJSONObject(r);
JSONArray columns = row.getJSONArray("c");

String name = columns.getJSONObject(0).getString("v");
String price = columns.getJSONObject(1).getString("v");

if (price == "null") {
Group group = new Group(name, null);
groups.add(group);
} else {
Service team = new Service(name, price);
teams.add(team);
}
}

我有简单的数据对象“服务”

public class Service {
private String name;
private String price;

public Service(String name, String price) {
this.name = name;
this.price = price;
}

并为组创建了另一个类(完全相同),我正在创建一个简单的 ListView (只是没有组名),但现在我意识到我需要创建服务的 ArrayList 的 ArrayList,我真的陷入了困境根据条件填充数组:if 'price' = null - 它是一个组,之后的所有元素都应存储在该组中,直到识别出另一个组。

JSON 数据示例(用于说明)

{ 
"rows": [
{ "c": [ { "v": "group name A" }, { "v": null }] },
{ "c": [ { "v": "service name a1" }, { "v": "100.00" } ] },
{ "c": [ { "v": "service name a2" }, { "v": "200.00" } ] },
{ "c": [ { "v": "group name B" }, { "v":null } ] },
{ "c": [ { "v": "service name b1" }, { "v": "100.00" } ] },
{ "c": [ { "v": "service name b2" }, { "v": "200.00" } ] },
...
],
...
}

所以组名也应该被捕获。

最佳答案

我建议您创建一个额外的类:

public class ServiceGroup {

private String name;
private List<Service> services;

public ServiceGroup(String name) {
this.name = name;
this.services = new ArrayList<>();
}

public List<Service> getServices() {
return services;
}
}

而不是使用 List<List<Service>> , 您现在可以使用 List<ServiceGroup> ,它允许您跟踪组名称但不处理以虚拟项目开头的列表。

一旦你有了这个类,你就可以用它来解析 json:

private void processJson(JSONObject object) {
try {
List<ServiceGroup> groups = new ArrayList<>();
ServiceGroup currentGroup = null;

JSONArray rows = object.getJSONArray("rows");

for (int r = 0; r < rows.length(); ++r) {
JSONObject row = rows.getJSONObject(r);
JSONArray columns = row.getJSONArray("c");

String name = columns.getJSONObject(0).getString("v");
JSONObject priceColumn = columns.getJSONObject(1);

if (priceColumn.isNull("v")) {
currentGroup = new ServiceGroup(name);
groups.add(currentGroup);
}
else {
String price = priceColumn.getString("v");
Service service = new Service(name, price);
currentGroup.getServices().add(service);
}
}

...
}
catch (JSONException e) {
...
}
}

与您之前可能看到的主要区别是:

  • List<ServiceGroup>替换 List<List<Service>>
  • for从0开始循环,这样我们就可以读到第一个组名

关于java - 按条件用 JSON 定义组或元素填充 ArrayList<ArrayList<Object>>(尝试在 Android 中为可扩展列表创建数据),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48828614/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com