1

我正在使用这段代码:

JSONObject jO = new JSONObject();

try {
    jO.put("item1", true);
    jO.put("item2", value2);
    jO.put("item3", value3);
} catch (JSONException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

String json = null;
try {
    json = jO.toString(4);
} catch (JSONException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

File jsonFile = new File(nContext.getDir("json", 0), "dashboard.json");
//simple utility method to write the json file
Utils.writeToFile(jsonFile, json);

得到这个结果:

{
    "item3": "12345",
    "item2": "abcde",
    "item1": true
}

在下一次运行同一段代码时,我想要实现的目标是:

{
    "pass1": {
        "item3": "12345",
        "item2": "abcde",
        "item1": true
    },
    "pass2": {
        "item3": "67890",
        "item2": "zxcvb",
        "item1": true
    }
}

或者也许有这个更好?

{
    "pass1": [
        {
            "item3": "12345",
            "item2": "abcde",
            "item1": true
        }
    ],
    "pass2": [
        {
            "item3": "67890",
            "item2": "zxcvb",
            "item1": true
        }
    ]
}

我知道这意味着代码中的更改以包含“嵌套”对象/数组。考虑到我必须解析 JSON 来构建一个,哪个更好ListView?有任何想法吗?

4

2 回答 2

2

由于其他用户的评论和“退休”的答案,我找到了解决方案,这里不再存在。也许是我的错没有说清楚。

public void addEntryToJsonFile(Context ctx, String id, String name, String size) {

    // parse existing/init new JSON 
    File jsonFile = new File(ctx.getDir("my_data_dir", 0), "my_json_file.json");
    String previousJson = null;
    if (jsonFile.exists()) {
        try {
            previousJson = Utils.readFromFile(jsonFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    } else {
        previousJson = "{}";
    }

    // create new "complex" object
    JSONObject mO = null;
    JSONObject jO = new JSONObject();

    try {
        mO = new JSONObject(previousJson);
        jO.put("completed", true);
        jO.put("name", name);
        jO.put("size", size);
        mO.put(id, jO); //thanks "retired" answer
    } catch (JSONException e) {
        e.printStackTrace();
    }

    // generate string from the object
    String jsonString = null;
    try {
        jsonString = mO.toString(4);
    } catch (JSONException e) {
        e.printStackTrace();
    }

    // write back JSON file
    Utils.writeToFile(jsonFile, jsonString);

}
于 2013-06-06T17:09:41.193 回答
1

在dentex评论后编辑

  1. 阅读你的文件
  2. 解析根 Json 对象
  3. 如果根对象不是已经是复杂对象
    1. 创建一个新的根对象
    2. 把你的根对象放进去
  4. 将第二个对象放在根对象中
  5. 写你的文件

在伪代码中:

oldJson = ParseJsonFromFile()
newJson = {"item1": true, "item2": "abcde" ...}
JSONObject root;
if (oldJson.hasKey("pass1") {
    root = oldJson
} else {
    root = new JSONObject()
    root.add("pass1", oldJson)
}
root.add("pass" + root.getSize() + 2, newJson)
WriteJsonToFile(root)
于 2013-06-06T10:00:48.827 回答