Android将大Json文件加载到HashMap中



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

CodiciCatastali.json

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

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

现在我想在我的安卓应用程序中使用它,但我无法弄清楚几件事。

首先,我应该在哪里保存文件?我对原始文件夹或资产文件夹表示不满,但哪种解决方案最好?

然后,我如何将它加载到像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的库的上下文。

第二次编辑

我尝试将文件存储在库的原始文件夹中,然后从主应用程序使用上下文访问它,出乎意料的是它奏效了!所以现在我可以说问题解决了,谢谢。

关于素材资源和原始资源的区别,请参考 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线程之外执行上述操作。

最新更新