1.JSONObject + JSONArray解析json对象
不同于xml文件,JSONOobject和JSONArray解析的不是流而是字符串。所以需要先把流里面的内容拿出来转成字符串,然后才开始解析。
public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); try { //不同于xml文件,JSONObject和JSONArray解析的不是流而是字符串 //1.流转字符串 StringBuffer sb = new StringBuffer(); File file = new File(Environment.getExternalStorageDirectory(),"book.json"); BufferedReader reader = new BufferedReader(new FileReader(file)); String str = null; while((str = reader.readLine()) != null){ sb.append(str); } Log.d(TAG, "onCreate: " + sb); String json = new String(sb); //2.解析一个json对象 /*JSONObject jsonObject = new JSONObject(json); String author = jsonObject.getString("author"); String name = jsonObject.getString("name"); String price = jsonObject.getString("price"); Log.d(TAG, "onCreate: " + author + "---" + name + "---" + price);*/ //2.解析一个json数组 JSONArray jsonArray = new JSONArray(json); for (int i = 0; i < jsonArray.length(); i ++){ JSONObject jsonObject = jsonArray.getJSONObject(i); String author = jsonObject.getString("author"); String name = jsonObject.getString("name"); String price = jsonObject.getString("price"); Log.d(TAG, "onCreate: " + author + "---" + name + "---" + price); } } catch (Exception e) { e.printStackTrace(); } } }
2.GSON解析json对象
public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); try { //1.准备参数流 File file = new File(Environment.getExternalStorageDirectory(), "book.json"); FileReader reader = new FileReader(file); //2.解析一条关于Book的json /*Gson gson = new Gson(); Book book = gson.fromJson(reader, new TypeToken<Book>() {}.getType());//★ String name = book.getName(); String author = book.getAuthor(); String price = book.getPrice(); Log.d(TAG, "onCreate: " + name + "---" + author + "---" + price);*/ //2.解析一条关于Book集合的json Gson gson = new Gson(); ArrayList<Book> bookList = gson.fromJson(reader, new TypeToken<ArrayList<Book>>() {}.getType());//★ for (Book book:bookList){ String name = book.getName(); String author = book.getAuthor(); String price = book.getPrice(); Log.d(TAG, "onCreate: " + name + "---" + author + "---" + price); } } catch (FileNotFoundException e) { e.printStackTrace(); } } }
3.JSONObject和GSON的区别
JSONObject是把json作为了一个对象,按照字符串/字符串数组来解析。
GSON是把json的内容,比如这个内容就是关于一本书的属性,它把这个内容统筹成一个对象/对象集合来解析。