How To Parse Local Json File In Assets?
Solution 1:
you should use Gson library as json parser.
add this dependency in app gradle file :
implementation 'com.google.code.gson:gson:2.8.1'
create raw folder in res folder. then copy your json file to raw folder.(its better to use raw folder instead of assets). for example you have this json file named my_json.json
{"list":[{"name":"Faraz Khonsari","age":24},{"name":"John Snow","age":28},{"name":"Alex Kindman","age":29}]}
then create your model class:
publicclassMyModel{
@SerializedName("list")public ArrayList<MyObject> list;
static publicclassMyObject{
@SerializedName("name")public String name;
@SerializedName("age")public int age;
}
}
then you should create a function to read your json file :
publicStringinputStreamToString(InputStream inputStream) {
try {
byte[] bytes = new byte[inputStream.available()];
inputStream.read(bytes, 0, bytes.length);
String json = newString(bytes);
return json;
} catch (IOException e) {
returnnull;
}
}
then read your json file:
String myJson=inputStreamToString(mActivity.getResources().openRawResource(R.raw.my_json));
then convert json string to model:
MyModel myModel = newGson().fromJson(myJson, MyModel.class);
now your Json have been converted to a model ! Congratulation!
Solution 2:
Previous answers work well, but if you're using Kotlin you can do it in a very nice and concise way by using the classes in the kotlin.io package.
val objectArrayString: String = context.resources.openRawResource(R.raw.my_object).bufferedReader().use { it.readText() }
val objectArray = Gson().fromJson(objectArrayString, MyObject::class.java)
You could even turn into a nice generic extension method if you want for easy reuse:
inlinefun<reified T> Context.jsonToClass(@RawRes resourceId: Int): T =
Gson().fromJson(resources.openRawResource(resourceId).bufferedReader().use { it.readText() }, T::class.java)
Which you would then simply call like this:
context.jsonToClass<MyObject>(R.raw.my_object)
Solution 3:
first you need to read the json file from assets , you can use this method
public String readFile(String fileName)throws IOException
{
BufferedReaderreader=null;
reader = newBufferedReader(newInputStreamReader(getAssets().open(fileName), "UTF-8"));
Stringcontent="";
String line;
while ((line = reader.readLine()) != null)
{
content = content + line
}
return content;
}
then
String jsonFileContent = readFile("json_in_assets.json");
JSONArray jsonArray = newJSONArray(jsonFileContent);
List<Person> persons = newArrayList<>();
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(newPerson(id , name , phone));
}
Solution 4:
Put your json file in raw folder and whit Gson library you can pars json :
Reader reader= newInputStreamReader(getResources().openRawResource(R.raw.json_test));
JsonElement json=newGson().fromJson(reader,JsonElement.class);
You can use this JsonElemnt for Gson or if you want json as string you can do this :
String jsonString=json.toString();
Post a Comment for "How To Parse Local Json File In Assets?"