我知道这个话题已经讨论过但我有一个双重问题,我在Android应用程序中找不到与JSon文件相关的其他页面的答案:
1)知道使用包含大量数据的ArrayList将文件保存在外部存储器上的最佳步骤。 从这个ArrayList中,我提取单个数据,如下所示(注意:此代码现在用于我在文本文件中写入,而不是在Json中):
File file = new File(Environment.getExternalStorageDirectory() + "FileName.txt");
FileWriter f = null;
PrintWriter p = null;
f = new FileWriter(file, false);
p = new PrintWriter(f);
[...]
for(int i=0; i<arrayList.size(); i++){
p.println(arrayList.get(0);
arrayList.remove(0);
}
[...]
p.close();
f.close();
我想使用相同的过程(arrayList)在外部存储器上创建一个Json文件。
2)我无法使用此特定结构创建Json文件。我想在另一个数组(“number_A”的元素)中有一个数组(单个项目),即:
{
"begin": 1753,
"end": 11941,
"number_A": [
[1805],
[5156],
[8592]
]
}
我只能创建这样的结构:
{
"begin": 1753,
"end": 11941,
"number_A": [
1805,
5156,
8592
]
}
有人可以给我一些建议吗?
感谢您的时间!
答案 0 :(得分:0)
这很简单。像
这样的东西private void createjson() throws JSONException {
JSONObject json = new JSONObject();
json.put("begin", 1753);
json.put("end", 11941);
JSONArray array = new JSONArray();
array.put(new JSONArray().put(1805));
array.put(new JSONArray().put(5156));
array.put(new JSONArray().put(8592));
json.put("number_A", array);
}
会给你{"number_A":[[1805],[5156],[8592]],"end":11941,"begin":1753}
答案 1 :(得分:0)
好的,你需要这样做,
第1步:导入google gson库here
第2步:为你的json定义一个类结构,在上面的例子中,这将是结构
Class Data{
int begin;
int end;
int[] number_A;
}
第3步:正如你所说,你有阵列表,所以我认为它就像这样ArrayList<Data>
一旦你有数组列表,调用这个方法来得到你的calss的json字符串表示。
String json = new Gson().toJson(your array list object here);
到现在为止,我们已准备好将这些数据放入文件系统中,以便使用它。
第4步:保存数据
try{
Gson gson = new Gson();
String json = gson.toJson(your array list object here);
FileOutputStream fos = context.
openFileOutput("YOUR_FILE_NAME_HERE", Context.MODE_PRIVATE);
fos.write(json.getBytes());
fos.close();
}catch(Exception e){
e.printStackTrace();
}
好吧,现在数据已保存,下一个议程如何在需要时阅读它,它再次简单易用。
第五步:读回json
try {
FileInputStream fis = context.openFileInput("YOUR_FILE_NAME");
FileReader reader = new FileReader(fis.getFD());
TypeToken<List<Data>> token = new TypeToken<List<Data>>() {
};
Gson gson = new Gson();
// your saved json back as list
List<Data> dataList= gson.fromJson(reader , token.getType());
}catch(Exception e){
e.printStackTrace();
}
好吧,所有人都希望这足以让你实施。