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

标签 java android json arraylist

我正在尝试在 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/

相关文章:

java - 为什么 TextNode 没有 update value(set) 方法?

java - Spring Security 中不同角色的多个主页

java - 如果 System s = null 那么下面的输出是什么

java - 如何在 JPanel 中创建垂直 TitledBorder (javax swing)

android - 如何在 Cocos2d 中裁剪图像

java - 代号一中的 FacebookConnect Api

php - 从 iphone/android 应用程序获取 referer

javascript - facebook graph api ajax XMLHttpRequest - 空结果?

java - 使用 wsdl2java 解析 wsdl 文件会导致错误消息

java - 在 Java 中创建 JSON 对象的方法