创建特定的Json结构并将其保存到外部存储器

时间:2014-09-04 10:30:34

标签: android json

我知道这个话题已经讨论过但我有一个双重问题,我在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
        ]
    }

有人可以给我一些建议吗?

感谢您的时间!

2 个答案:

答案 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();
    }

好吧,所有人都希望这足以让你实施。