0

我不知道标题是否非常准确,但让我解释一下我想要什么。我有这个很长的 JSONObject(遗憾的是它不是一个数组,我不能循环遍历它),其中有许多其他 JSONObjects 具有相似的元素(id、名称、图标),当我阅读一个元素时,它会写入它的值在一个单独的类中实现了 Parcelable。在我进一步解释之前,这是我的 Parcelable 类的样子:

public class ItemsInfo implements Parcelable {

    public int itemId;
    public String itemName, itemIcon;

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(itemName);
        dest.writeString(itemIcon);
        dest.writeInt(itemId);
    }

    public static final Parcelable.Creator<ItemsInfo > CREATOR = new Parcelable.Creator<ItemsInfo >() {

        @Override
        public ItemsInfo createFromParcel(Parcel source) {
            ItemsInfo ei = new ItemsInfo();
            ei.itemName = source.readString();
            ei.itemIcon = source.readString();
            ei.itemId = source.readInt();
            return ei;
        }

        @Override
        public ItemsInfo [] newArray(int size) {
            return new ItemsInfo [size];
        }
    };
}

我想要的是每次读取具有相似元素的 JSONObject 时,用 String itemName 中的 ArrayList 编写它们,所以以后我可以只通过索引或其他东西访问给定的项目,而不必制作单独的字符串和每个不同项目的整数,如 itemName1、itemName2、itemName3 ..... 有可能吗?

4

1 回答 1

1

您可以使用droidQuery来简化JSON解析。要将您的转换JSONObject键值映射,您可以使用:

List<String> items = new ArrayList<String>();//this will contain your JSONObject strings
Map<String, ?> data = null;
try {
    JSONObject json;//this references your JSONObject
    data = $.map(json);

} catch (Throwable t) {
    Log.e("JSON", "Malformed JSON Object");
}

然后,要遍历每个元素,只需执行以下操作:

if (data != null) {
    for (Map.Entry<String, ?> entry : data.entrySet()) {
        items.add(entry.value().toString());
    }
}

现在,您的List 项目已填充您JSONObejct的 s 的字符串表示形式。稍后,如果您想解析此 JSON,只需执行以下操作:

int index = 2;//the index of the JSONObject you want
try {
    Map<String, ?> data = $.map(new JSONObject(items.get(2)));
    //now iterate the map
} catch (Throwable t) {
    t.printStackTrace();//something wrong with your JSON string
}
于 2013-08-28T13:34:08.883 回答