Android将Json大文件加载到HashMap中

时间:2018-08-06 17:31:57

标签: android json

在我的应用程序中,我有一个非常大的json文件(7947行),其结构非常简单,该文件将每个意大利城市及其Codice Catastale配对。

CodiciCatastali.json

...      
"Villamar": "L966",
"Villamassargia": "L968",
"Villanova Tulo": "L992",
"Villanovaforru": "L986",
"Villanovafranca": "L987",
"Villaperuccio": "M278",
"Villaputzu": "L998",
...

我已经在JS中使用过它,并且加载起来很容易。

现在,我想在我的android应用程序中使用它,但我不知道有几件事。

首先,我应该将文件保存在什么地方?我对Raw文件夹或Assets文件夹有什么看法,但是哪种解决方案是最好的?

然后,如何将其加载到类似HashMap的对象中?我需要在给出城市名称后查找代码。 (“键”->“值”)

感谢您的帮助。

编辑

感谢Hamid Fadishei,我更新了代码:

HashMap map = new HashMap<String, String>();
    try {
        InputStream is = getResources().openRawResource(R.raw.CodiciCatastali);
        JsonReader reader = new JsonReader(new InputStreamReader(is));
        map = new Gson().fromJson(reader, HashMap.class);
        } catch (Exception e) {
        e.printStackTrace();
    }

但是现在我无法调用getResources(),因为它要求我提供上下文。无论如何,我都想将上下文从主应用程序传递到模块,但这将为我提供应用程序的上下文,而不是存储我的file.json的库之一。

第二编辑

我尝试将文件存储在库的原始文件夹中,然后使用Context从主应用程序访问它,但意外地它起作用了! 现在我可以说问题解决了,谢谢。

1 个答案:

答案 0 :(得分:2)

关于资产和原始资源之间的区别,请参阅The reason for Assets and Raw Resources in Android

要加载JSON文件,可以使用Gson等第三方库。只需将依赖项添加到build.gradle:

compile 'com.google.code.gson:gson:2.8.5'

然后您就可以这样:

InputStream is = getAssets().open("CodiciCatastali.json");
JsonReader reader = new JsonReader(new InputStreamReader(is));
HashMap<String, Integer> map = gson.fromJson(reader, HashMap.class);

由于您已经提到文件的大小,因此建议在UI线程之外执行上述操作。