温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

android json 解析

发布时间:2020-06-02 05:49:42 来源:网络 阅读:419 作者:郑传余 栏目:移动开发

一、json简介

    json指的是javascript对象表示法(javascript object notation),它是一种轻量级文本数据交换格式,类似于xml,但比xml更小,更快,更易解析(xml需要下载到手机端进行解析);

    json是基于javascript的一个子集,它使用javascript语法来描述数据对象,但是json任然独立于语言和平台,json解析器和json库支持许多不同编程语言,同时也易于机器解析和生成;

优酷:http://v.youku.com/v_show/id_XODYzMTEwODY4.html

爱奇艺:http://www.iqiyi.com/w_19rsb9thy1.html#vfrm=5-7-4-1(涉及服务器的搭建可见视频)

二、json数据解析

    1、json object(多个,也可以单个)

       {"person":{"address":"上海黄浦区","id":1001,"name":"jack"}} 

    2、解析,一个对象,多组值,可以使用相同的语法表示多个值(每个值包含多个记录):
       这里最值得注意的是,能够表示多个值,每个值进而包含多个值。但是还应该注意,在不同的主条目,记录中实际的名称 / 值对可以      
       不一样。JSON 是完全动态的,允许在 JSON 结构的中间改变表示数据的方式。在处理 JSON 格式的数据时,没有需要遵守的预定义的约束。所以,在同样的数据结构中,可以改变表      示数据的方式,甚至可以以不同方式表示同一事物。

       {"persons":[{"address":"上海黄浦区","id":1001,"name":"jack"},{"address":"上海闵行区","id":1002,"name":"rose"},{"address":"上海黄浦区","id":1003,"name":"mick"}]}
      
    3、解析json Array

       {"listString":["北京","上海","湖南"]}

    4、解析json object 和 json array 混合对象

       {"listMap":[{"id":1001,"address":"北京","name":"jack"},{"id":1001,"address":"上海","name":"rose"}]}

文件目录:

android json 解析

activity_main.xml代码不再给出

android json 解析


[html] view plaincopy

  1. public class MainActivity extends Activity {  

  2.       

  3.     private Button btn_person;  

  4.     private Button btn_persons;  

  5.     private Button btn_listString;  

  6.     private Button btn_listMap;  

  7.     private TextView tv_show;  

  8.       

  9.     private static String PATH = "http://192.168.1.100:8080/2.9/com/JsonServlet";    

  10.     private static final String TAG = "MainActivity";   

  11.   

  12.     @Override  

  13.     protected void onCreate(Bundle savedInstanceState) {  

  14.         super.onCreate(savedInstanceState);  

  15.         setContentView(R.layout.activity_main);  

  16.           

  17.         btn_person = (Button)findViewById(R.id.btn_person);  

  18.         btn_persons = (Button)findViewById(R.id.btn_persons);  

  19.         btn_listString = (Button)findViewById(R.id.btn_listString);  

  20.         btn_listMap = (Button)findViewById(R.id.btn_listMap);  

  21.         tv_show = (TextView)findViewById(R.id.tv_show);  

  22.           

  23.         btn_person.setOnClickListener(new MyButtonListenerPersion());  

  24.         btn_persons.setOnClickListener(new MyButtonListenerPersions());  

  25.         btn_listString.setOnClickListener(new MyButtonListenerlistString());  

  26.         btn_listMap.setOnClickListener(new MyBuutonListenerlistMap());  

  27.           

  28.     }  

  29.       

  30.     class MyButtonListenerPersion implements OnClickListener{  

  31.   

  32.         @Override  

  33.         public void onClick(View v) {  

  34.               

  35.                 String path2=PATH+"?action_flag=person";    

  36.                 String jsonString1 = HttpUtils.getJsonContent(path2);    

  37.                 Person person = JsonTools.getPerson("person", jsonString1);   

  38.                 tv_show.setText(person.toString());  

  39.                 Log.i(TAG, person.toString());                

  40.         }     

  41.     }  

  42.       

  43.     class MyButtonListenerPersions implements OnClickListener{  

  44.   

  45.         @Override  

  46.         public void onClick(View v) {  

  47.               

  48.              String path3=PATH+"?action_flag=persons";    

  49.                 String jsonString2 = HttpUtils.getJsonContent(path3);    

  50.                 List<Person> list2 = JsonTools.getPersons("persons", jsonString2);    

  51.                 tv_show.setText(list2.toString());  

  52.                 Log.i(TAG, list2.toString());     

  53.         }     

  54.     }  

  55.       

  56.     class MyButtonListenerlistString implements OnClickListener{  

  57.   

  58.         @Override  

  59.         public void onClick(View v) {  

  60.               

  61.             String path4=PATH+"?action_flag=listString";    

  62.             String jsonString3 = HttpUtils.getJsonContent(path4);    

  63.             List<String> list3 = JsonTools.getList("listString", jsonString3);    

  64.             tv_show.setText(list3.toString());  

  65.             Log.i(TAG, list3.toString());  

  66.               

  67.         }     

  68.     }  

  69.       

  70.     class MyBuutonListenerlistMap implements OnClickListener{  

  71.   

  72.         @Override  

  73.         public void onClick(View v) {  

  74.               

  75.             String path5=PATH+"?action_flag=listMap";    

  76.             String jsonString4 = HttpUtils.getJsonContent(path5);    

  77.             List<Map<String,Object>> list4 = JsonTools.getListMap("listMap", jsonString4);    

  78.             tv_show.setText(list4.toString());  

  79.             Log.i(TAG, list4.toString());   

  80.               

  81.         }         

  82.     }  

  83.       

  84. }  


/********************************************************************************************************************************************************************************/



[html] view plaincopy

  1. public class Person {  

  2.   

  3.     private int id;  

  4.     private String name;  

  5.     private String address;  

  6.   

  7.     public Person() {  

  8.         super();  

  9.     }  

  10.   

  11.     public Person(int id, String name, String address) {  

  12.         super();  

  13.         this.id = id;  

  14.         this.name = name;  

  15.         this.address = address;  

  16.     }  

  17.   

  18.     public int getId() {  

  19.         return id;  

  20.     }  

  21.   

  22.     public void setId(int id) {  

  23.         this.id = id;  

  24.     }  

  25.   

  26.     public String getName() {  

  27.         return name;  

  28.     }  

  29.   

  30.     public void setName(String name) {  

  31.         this.name = name;  

  32.     }  

  33.   

  34.     public String getAddress() {  

  35.         return address;  

  36.     }  

  37.   

  38.     public void setAddress(String address) {  

  39.         this.address = address;  

  40.     }  

  41.   

  42.     @Override  

  43.     public String toString() {  

  44.         return "address=" + address + "id=" + id + "name=" + name;  

  45.     }  

  46.   

  47. }  


/************************************************************************************************************************************************************************************/



[html] view plaincopy

  1. public class JsonTools {  

  2.       

  3.      public JsonTools() {    

  4.            

  5.         }    

  6.             

  7.         /**    

  8.          * 获取对象数据    

  9.          * @param key    

  10.          * @param jsonString    

  11.          * @return    

  12.          */    

  13.         public static Person getPerson(String key,String jsonString){    

  14.             Person person = new Person();    

  15.             try {  

  16.                 //构建一个JSONObject jsontokener  

  17.                 JSONObject jsonObject = new JSONObject(jsonString);    

  18.                 //得到JSONObject值与密钥相关,就是对象  

  19.                 JSONObject personObject = jsonObject.getJSONObject(key);    

  20.                //取得数据  

  21.                 person.setId(personObject.getInt("id"));    

  22.                 person.setName(personObject.getString("name"));    

  23.                 person.setAddress(personObject.getString("address"));    

  24.             } catch (JSONException e) {    

  25.                 e.printStackTrace();    

  26.             }    

  27.             return person;    

  28.         }    

  29.             

  30.         /**    

  31.          * 获取对象数组数据    

  32.          * @param key    

  33.          * @param jsonString    

  34.          * @return    

  35.          */    

  36.         public static List<Person> getPersons(String key,String jsonString){    

  37.             List<Person> list = new ArrayList<Person>();    

  38.             try {    

  39.                 JSONObject jsonObject = new JSONObject(jsonString);    

  40.                 //返回json的数组    

  41.                 JSONArray jsonArray = jsonObject.getJSONArray(key);    

  42.                 for(int i=0;i<jsonArray.length();i++){    

  43.                     JSONObject jsonObject2 = jsonArray.getJSONObject(i);    

  44.                     Person person = new Person();    

  45.                     person.setId(jsonObject2.getInt("id"));    

  46.                     person.setName(jsonObject2.getString("name"));    

  47.                     person.setAddress(jsonObject2.getString("address"));    

  48.                     list.add(person);    

  49.                 }    

  50.             } catch (JSONException e) {    

  51.                 e.printStackTrace();    

  52.             }    

  53.                 

  54.             return list;    

  55.         }    

  56.         /**    

  57.          * 获取String数组数据    

  58.          * @param key    

  59.          * @param jsonString    

  60.          * @return    

  61.          */    

  62.         public static List<String> getList(String key,String jsonString){    

  63.             List<String> list = new ArrayList<String>();    

  64.             try {    

  65.                 JSONObject jsonObject = new JSONObject(jsonString);    

  66.                 JSONArray jsonArray = jsonObject.getJSONArray(key);    

  67.                 for(int i=0;i<jsonArray.length();i++){    

  68.                     String msg = jsonArray.getString(i);    

  69.                     list.add(msg);    

  70.                 }    

  71.             } catch (JSONException e) {    

  72.                 e.printStackTrace();    

  73.             }    

  74.             return list;    

  75.         }    

  76.         /**    

  77.          * 获取对象的Map集合数据    

  78.          * @param key    

  79.          * @param jsonString    

  80.          * @return    

  81.          */    

  82.         public static List<Map<String,Object>> getListMap(String key,String jsonString){    

  83.             List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();    

  84.             try {    

  85.                 JSONObject jsonObject = new JSONObject(jsonString);    

  86.                 JSONArray jsonArray = jsonObject.getJSONArray(key);    

  87.                 for(int i=0;i<jsonArray.length();i++){    

  88.                     JSONObject jsonObject2 = jsonArray.getJSONObject(i);    

  89.                     Map<String,Object> map = new HashMap<String, Object>();    

  90.                     Iterator<String> iterator = jsonObject2.keys();    

  91.                     while(iterator.hasNext()){    

  92.                         String json_key = iterator.next();    

  93.                         Object json_value = jsonObject2.get(json_key);    

  94.                         if(json_value==null){    

  95.                             json_value = "";    

  96.                         }    

  97.                         map.put(json_key, json_value);    

  98.                     }    

  99.                     list.add(map);    

  100.                 }    

  101.             } catch (JSONException e) {    

  102.                 e.printStackTrace();    

  103.             }               

  104.             return list;    

  105.         }    

  106.   

  107. }  


/************************************************************************************************************************************************************************************/



[html] view plaincopy

  1. public class HttpUtils {  

  2.       

  3.     /*  

  4.      * 打开远程链接getContent  

  5.      */  

  6.       

  7.     public HttpUtils() {    

  8.     }    

  9.         

  10.     public static String getJsonContent(String path){    

  11.         try {    

  12.             //指定资源参数实例  

  13.             URL url = new URL(path);  

  14.             //url.openConnection()指定打开一个远程资源  

  15.             //HttpURLConnection抽象的Http连接方法extends URLConnection  

  16.             HttpURLConnection connection = (HttpURLConnection)url.openConnection();    

  17.             //在3秒内不能建立连接,将抛异常  

  18.             connection.setConnectTimeout(3000);  

  19.             //设置请求的命令将被发送到远程HTTP服务器。这个方法只能在连接称为。  

  20.             connection.setRequestMethod("GET");  

  21.             //设置标志指示是否允许输入这个URLConnection  

  22.             connection.setDoInput(true);    

  23.             //得到服务器返回的参数值  

  24.             int code = connection.getResponseCode();    

  25.             if(code == 200){    

  26.                 return changeInputStream(connection.getInputStream());    

  27.             }    

  28.         } catch (MalformedURLException e) {    

  29.             e.printStackTrace();    

  30.         } catch (IOException e) {    

  31.             e.printStackTrace();    

  32.         }    

  33.         return null;    

  34.     }    

  35.     

  36.     /**    

  37.      * 将一个输入流转换成指定编码的字符串      

  38.      * @param inputStream    

  39.      * @return    

  40.      */    

  41.     private static String changeInputStream(InputStream inputStream) {    

  42.         String jsonString = "";    

  43.         ByteArrayOutputStream outputStream = new ByteArrayOutputStream();    

  44.         int len = 0;    

  45.         byte[] data = new byte[1024];    

  46.         try {    

  47.             while((len=inputStream.read(data))!=-1){    

  48.                 outputStream.write(data,0,len);    

  49.             }    

  50.             jsonString = new String(outputStream.toByteArray());    

  51.         } catch (IOException e) {    

  52.             e.printStackTrace();    

  53.         }    

  54.         return jsonString;    

  55.     }    

  56.   

  57. }  



附件:http://down.51cto.com/data/2365260
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI