JSON只会加载一个值

时间:2016-10-16 20:34:21

标签: java android json

问题是JSON在load方法中读取文件。我将在评论中描述。 注意:为了更清晰的视图,省略了许多代码

val result = sqlContext.read.json(sc.textFile(files.mkString(",")))

然后问题在load方法中持续存在,因为我只能得到一个值。所有其他值都是不正确的 - 所以当我设法让它几分钟后输出是{{" n1_0":1," n1_1":0,&# 34; N1_2":0," n1_3":0}]。 S0只是第一个值是正确的

private static final String ID = "moti_data";

public static void save(Context context) throws IOException, JSONException {
    JSONArray arr = new JSONArray();
    JSONObject obj = new JSONObject();
    for (int i = 0; i < notify1.length; i++)
        obj.put("n1_" + i, notify1[i]);
    arr.put(obj);
    //while testing ar.toString() was arr[{"n1_0":1,"n1_1":15,"n1_2":23,"n1_3":0}]
    //it is clear that it contains 4 values but arr.length() will give 1
    String file = arr.toString();
    FileOutputStream output = context.openFileOutput(ID, MODE_PRIVATE);
    output.write(file.getBytes());
    output.close();
}

所以无论我做了什么/尝试过,我得到一个循环和json异常。但是,由于我最初认为问题不在于储蓄,因为产出是好的。或者我错了吗?

EDDIT:代码中有6个4个值的块(为清晰起见,这里只有一个)。此外,我无法对它们进行硬编码,因为用户可以更改值

2 个答案:

答案 0 :(得分:1)

您正在迭代对象,但不是通过它们的参数。你可以迭代你的对象参数:

JSONArray data = new JSONArray(buffer.toString());
for (int i = 0; i < data.length(); i++) 
    for (int j = 0; j < myParametherCount; j++) 
        notify1[i] = data.getJSONObject(i).getInt("n1_" + j);
        //note that you have to edit which element of the notify1 list you will use to store this data

其中myParametherCount是一个对象将具有的参数计数。

你在第5个对象上遇到异常,你试图超出未定义列表的第5个元素(在本例中)。

答案 1 :(得分:1)

您的JSONArray只包含一个JSONObject:

JSONObject object = data.getJSONObject(0);
for (int i = 0; i < data.length(); i++)
    notify1[i] = object.getInt("n1_" + i);

要访问JSONObject上的每个值,您应该这样做:

{{1}}

我使用https://jsonformatter.curiousconcept.com以清晰的方式查看JSON层次结构。希望我解决了你的问题。