繁体   English   中英

如何解析资产中的本地JSON文件?

[英]How to parse local JSON file in assets?

我的资产文件夹中有一个 JSON 文件。 该文件有一个带有数组的对象。 该数组有 150 多个对象,每个对象都有三个字符串。

对于这 150 多个对象中的每一个,我想提取每个字符串并创建一个 java 模型对象,它传递三个字符串。 我在 android JSON 解析上找到的所有教程都是从我不想做的 url 中获取 JSON。

你应该使用Gson 库作为json 解析器

在应用程序 gradle 文件中添加此依赖项:

implementation 'com.google.code.gson:gson:2.8.1'

在 res 文件夹中创建 raw 文件夹。 然后将您的 json 文件复制到原始文件夹。(最好使用原始文件夹而不是资产)。 例如你有这个名为my_json.json的 json 文件

{
  "list": [
    {
      "name": "Faraz Khonsari",
      "age": 24
    },
    {
      "name": "John Snow",
      "age": 28
    },
    {
      "name": "Alex Kindman",
      "age": 29
    }
  ]
} 

然后创建你的模型类

public class MyModel {
        @SerializedName("list")
        public ArrayList<MyObject> list;

       static public class MyObject {
            @SerializedName("name")
            public String name;
            @SerializedName("age")
            public int age;
        }
    }

那么你应该创建一个函数来读取你的 json 文件:

public String inputStreamToString(InputStream inputStream) {
        try {
            byte[] bytes = new byte[inputStream.available()];
            inputStream.read(bytes, 0, bytes.length);
            String json = new String(bytes);
            return json;
        } catch (IOException e) {
            return null;
        }
    }

然后读取你的 json 文件:

String myJson=inputStreamToString(mActivity.getResources().openRawResource(R.raw.my_json));

然后将 json 字符串转换为模型:

MyModel myModel = new Gson().fromJson(myJson, MyModel.class);

现在您的 Json 已转换为模型! 恭喜!

以前的答案效果很好,但如果您使用的是 Kotlin,则可以通过使用 kotlin.io 包中的类以一种非常简洁的方式来完成。

val objectArrayString: String = context.resources.openRawResource(R.raw.my_object).bufferedReader().use { it.readText() }
val objectArray = Gson().fromJson(objectArrayString, MyObject::class.java)

如果你想轻松重用,你甚至可以变成一个很好的通用扩展方法:

inline fun <reified T> Context.jsonToClass(@RawRes resourceId: Int): T =
        Gson().fromJson(resources.openRawResource(resourceId).bufferedReader().use { it.readText() }, T::class.java)

然后你可以这样简单地调用它:

context.jsonToClass<MyObject>(R.raw.my_object)

首先你需要从资产中读取json文件,你可以使用这个方法

public String readFile(String fileName) throws IOException
{
  BufferedReader reader = null;
  reader = new BufferedReader(new InputStreamReader(getAssets().open(fileName), "UTF-8")); 

  String content = "";
  String line;
  while ((line = reader.readLine()) != null) 
  {
     content = content + line
  }

  return content;

}

然后

String jsonFileContent = readFile("json_in_assets.json");
JSONArray jsonArray = new JSONArray(jsonFileContent);
List<Person> persons = new ArrayList<>();
for (int i=0;i<jsonArray.length();i++)
{
  JSONObject jsonObj = jsonArray.getJSONObject(i);
  Integer id = jsonObj.getInt("id");
  String name = jsonObj.getString("name");
  String phone = jsonObj.getString("phone");
  persons.add(new Person(id , name , phone));
}

将你的 json 文件放在 raw 文件夹和 Gson 库中,你可以解析 json:

Reader reader= new InputStreamReader(getResources().openRawResource(R.raw.json_test));
JsonElement json=new Gson().fromJson(reader,JsonElement.class); 

您可以将此 JsonElemnt 用于 Gson,或者如果您想要 json 作为字符串,您可以这样做:

String jsonString=json.toString();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM