问题是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个值的块(为清晰起见,这里只有一个)。此外,我无法对它们进行硬编码,因为用户可以更改值
答案 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层次结构。希望我解决了你的问题。