How can I parse a local JSON file from assets folder into a ListView?
As Faizan describes in their answer here:
First of all read the Json File from your assests file using below code.
and then you can simply read this string return by this function as
public String loadJSONFromAsset() { String json = null; try { InputStream is = getActivity().getAssets().open("yourfilename.json"); int size = is.available(); byte[] buffer = new byte[size]; is.read(buffer); is.close(); json = new String(buffer, "UTF-8"); } catch (IOException ex) { ex.printStackTrace(); return null; } return json;}
and use this method like that
try { JSONObject obj = new JSONObject(loadJSONFromAsset()); JSONArray m_jArry = obj.getJSONArray("formules"); ArrayList<HashMap<String, String>> formList = new ArrayList<HashMap<String, String>>(); HashMap<String, String> m_li; for (int i = 0; i < m_jArry.length(); i++) { JSONObject jo_inside = m_jArry.getJSONObject(i); Log.d("Details-->", jo_inside.getString("formule")); String formula_value = jo_inside.getString("formule"); String url_value = jo_inside.getString("url"); //Add your values in your `ArrayList` as below: m_li = new HashMap<String, String>(); m_li.put("formule", formula_value); m_li.put("url", url_value); formList.add(m_li); } } catch (JSONException e) { e.printStackTrace(); }
For further details regarding JSON Read HERE
{ // json object node "formules": [ // json array formules { // json object "formule": "Linear Motion", // string "url": "qp1" }
What you are doing
Context context = null; // context is null try { String jsonLocation = AssetJSONFile("formules.json", context);
So change to
try { String jsonLocation = AssetJSONFile("formules.json", CatList.this);
To parse
I believe you get the string from the assests folder.
try{String jsonLocation = AssetJSONFile("formules.json", context);JSONObject jsonobject = new JSONObject(jsonLocation);JSONArray jarray = (JSONArray) jsonobject.getJSONArray("formules");for(int i=0;i<jarray.length();i++){JSONObject jb =(JSONObject) jarray.get(i);String formula = jb.getString("formule");String url = jb.getString("url");}} catch (IOException e) { e.printStackTrace();} catch (JSONException e) { e.printStackTrace();}
With Kotlin have this extension function to read the file return as string.
fun AssetManager.readAssetsFile(fileName : String): String = open(fileName).bufferedReader().use{it.readText()}
Parse the output string using any JSON parser.