JSON 是存储和交换文本信息的语法,类似 XML,并且JSON 具有自我描述性,更易理解,那json对象和json数组的区别是什么?下面来我们就来给大家讲解一下。
JSON可以有两种格式:
一种是对象格式的:
{"name":"JSON","address":"北京市西城区","age":25}//JSON的对象格式的字符串;
另一种是数组对象
[{"name":"JSON","address":"北京市西城区","age":25}]//数据对象格式;
从上面的两种格式可以看出对象格式和数组对象格式唯一的不同则是在对象格式的基础上加上了[],再来看具体的结构,可以看出都是以键值对的形式出现的,中间以英文状态下的逗号(,)分隔。
json数组如何解析?
package com.example.z111505; import java.io.IOException; import java.io.InputStream; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.util.Log; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends ActionBarActivity { TextView text; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); text = (TextView) findViewById(R.id.mytxt); // //將文件转化为流 //InputStream inputStream=getResources().openRawResource(R.raw.j111502); ////input:输入流 //byte[] ppp; //try { // ppp = new byte[inputStream.available()]; // inputStream.read(ppp); // String ttt=new String(ppp); // // inputStream.close(); // text.setText(ttt); // //2. String ttt 取出value // // JSONObject jsonObject = new JSONObject(ttt); // String ggg=jsonObject.getString("ttt"); // String gg2=jsonObject.getString("hhhh"); // Toast.makeText(MainActivity.this, ggg, 1).show(); //// Toast.makeText(MainActivity.this, gg2, 1).show(); // //-----解析json数组 // // //} catch (IOException e) { // // TODO Auto-generated catch block // e.printStackTrace(); //} catch (JSONException e) { // // TODO Auto-generated catch block // e.printStackTrace(); //} // // //====解析json数组 InputStream inputStream = getResources() .openRawResource(R.raw.j111503); //把raw文件下的j111503文件下的所有内容变成输入流 try { //inputStream.available() 流的可利用长度 byte pp[] = new byte[inputStream.available()]; //根据流的可利用长度转化为字节数组 inputStream.read(pp); //将流里的数据读到pp字节数组里 inputStream.close(); // 流中的资源使用完 关闭留 String tt = new String(pp); //将byte字节数组转成字符串 //如果是乱码 则String tt=new String(pp,"utf-8");或者gbk //如果实现不了 将json文件中的分号改为英文的逗号 Log.e("aaaa", tt); JSONArray array = new JSONArray(tt); //将字符串转成json数组 for (int i = 0; i < array.length(); i++) { < p = "" > String b0 = array.getString(i); //从数组里取出数组 Log.e("aaaa", b0); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
补充步骤:解析带中括号的{}
第一步:将文件转化为输入流,并将输入流存储到字节数组里 关闭流
InputStream inputStream=getResources().openRawResource(R.raw.j111502); byte[] ppp=new byte[inputStream.available] //根据流的可利用长度转化为字节数组 inputStream.read(pp); //将流里的数据读到pp字节数组里 inputStream.close();
第二步:将字节数组转化为字符串,
String ttt=new String(ppp);
第三步:用jsonobject的方式取出字符,并显示
JSONObject jsonObject = new JSONObject(ttt); String ggg=jsonObject.getString("ttt"); String gg2=jsonObject.getString("hhhh"); Toast.makeText(MainActivity.this, ggg, 1).show(); Toast.makeText(MainActivity.this, gg2, 1).show();
第二种解析解析数组[]
前几个步骤都一样只有最后一个步骤不一样
第三步:将得到的数据保存到jsonarray里面,用循环的方式读取出来
JSONArray array = new JSONArray(tt); //将字符串转成json数组 for (int i = 0; i < array.length(); i++) { < p = "" > String b0 = array.getString(i); //从数组里取出数组 Log.e("aaaa", b0); }
Json数组的解析就是以上这两种方法,我们可以使用任何一种方法可以将json数组解析出来,大家可以试试!最后大家如果想要了解更多json相关知识,敬请关注奇Q工具网。
推荐阅读: