加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

JSONObject与JSONArray的使用

发布时间:2020-12-16 19:57:22 所属栏目:百科 来源:网络整理
导读:原文链接:http://coolxing.iteye.com/blog/1211403 什么是JSON: JSON即JavaScript Object Natation,它是一种轻量级的数据交换格式,与XML一样,是广泛被采用的客户端和服务端交互的解决方案. JSON对象: JSON中对象(Object)以"{"开始,以"}"结束. 对象中的每一

原文链接:http://coolxing.iteye.com/blog/1211403


什么是JSON:

JSON即JavaScript Object Natation,它是一种轻量级的数据交换格式,与XML一样,是广泛被采用的客户端和服务端交互的解决方案.

JSON对象: JSON中对象(Object)以"{"开始,以"}"结束. 对象中的每一个item都是一个key-value对,表现为"key:value"的形式,key-value对之间使用逗号分隔. 如:{"name":"coolxing","age"=24,"male":true,"address":{"street":"huiLongGuan","city":"beijing","country":"china"}}. JSON对象的key只能是string类型的,而value可以是string,number,false,true,null,Object对象甚至是array数组,也就是说可以存在嵌套的情况.

JSON数组: JSON数组(array)以"["开始,以"]"结束,数组中的每一个元素可以是string,数组间的元素使用逗号分隔. 如["coolxing",24,{"street":"huiLongGuan","country":"china"}].

JSON数据的解析:解析JSON数据,首先需要明确待解析的是JSON Object还是JSON array,然后需要确定采用哪种解析技术. android平台上一般有2种解析技术可供选择: android内置的org.json包和google的开源gson库. 以下将分别采用这两种技术解析JSON对象和JSON数组.

1. 采用android内置的org.json包解析JSON对象. 假设待解析的JSON数据为json = "{"name":"coolxing","age"=24,"male":true,"address":{"street":"huiLongGuan","city":"beijing","country":"china"}}",其中用于转义表达式中的双引号. 首先定义2个JavaBean:

Java代码
  1. publicclassAddress{
  2. privateStringstreet;
  3. privateStringcity;
  4. privateStringcountry;
  5. publicAddress(){
  6. super();
  7. }
  8. publicAddress(Stringstreet,Stringcity,Stringcountry){
  9. this.street=street;
  10. this.city=city;
  11. this.country=country;
  12. publicStringgetStreet(){
  13. returnstreet;
  14. voidsetStreet(Stringstreet){
  15. publicStringgetCity(){
  16. returncity;
  17. voidsetCity(Stringcity){
  18. publicStringgetCountry(){
  19. returncountry;
  20. voidsetCountry(Stringcountry){
  21. @Override
  22. publicStringtoString(){
  23. return"Address[street="+street+",city="+city+",country="
  24. +country+"]";
  25. }

classPerson{

  • privateStringname;
  • privateintage;
  • booleanmale;
  • privateAddressaddress;
  • publicPerson(){
  • publicPerson(Stringname,intage,85); font-weight:bold">booleanmale,Addressaddress){
  • this.name=name;
  • this.age=age;
  • this.male=male;
  • this.address=address;
  • publicStringgetName(){
  • returnname;
  • voidsetName(Stringname){
  • intgetAge(){
  • returnage;
  • voidsetAge(intage){
  • booleanisMale(){
  • returnmale;
  • voidsetMale(booleanmale){
  • publicAddressgetAddress(){
  • returnaddress;
  • voidsetAddress(Addressaddress){
  • return"Person[name="+name+",age="+age+",male="+male
  • +",address="+address+"]";
  • }
  • 下面是具体的解析代码:

    JSONObjectjsonObject=newJSONObject(json);

  • Stringname=jsonObject.getString("name");
  • intage=jsonObject.getInt("age");
  • booleanmale=jsonObject.getBoolean("male");
  • JSONObjectaddressJSON=jsonObject.getJSONObject("address");
  • Stringstreet=addressJSON.getString("street");
  • Stringcity=addressJSON.getString("city");
  • Stringcountry=addressJSON.getString("country");
  • Addressaddress=newAddress(street,city,country);
  • Personperson=newPerson(name,age,male,address);
  • System.out.println(person);
  • LogCat的输出为Person [name=coolxing,age=24,male=true,address=Address [street=huiLongGuan,city=beijing,country=china]],说明已经正确解析了JSON对象.

    2. 采用gson库解析JSON对象. 假设带解析的JSON数据是json = "{"name":"coolxing",首先需要到http://code.google.com/p/google-gson/下载jar包,并将其添加到项目中.具体的解析代码如下:

    Gsongson=newGson();

  • Personperson=gson.fromJson(json,Person.class);
  • 3. 采用android内置的org.json包解析JSON数组. 假设待解析的JSON数据为json ="[{"name":"coolxing","country":"china"}},{"name":"min","age"=20,"male":false,"address":{"street":"heiShiJiao","city":"daLian","country":"china"}}]",解析代码如下:

    List<Person>persons=newArrayList<Person>();

  • JSONArrayjsonArray=newJSONArray(json);
  • for(inti=0;i<jsonArray.length();i++){
  • JSONObjectjsonObject=jsonArray.getJSONObject(i);
  • persons.add(person);
  • System.out.println(persons);
  • LogCat的输出为[Person [name=coolxing,Person [name=min,age=20,male=false,address=Address [street=heiShiJiao,city=daLian,country=china]]],说明已经正确解析了JSON数组.


    4.采用gson库解析JSON数组. 待解析的JSON数据同上,具体代码为:

    TypelistType=newTypeToken<List<Person>>(){}.getType();

  • List<Person>persons=gson.fromJson(json,listType);
  • LogCat的输出为[Person [name=coolxing,说明已经正确解析了JSON数组.
    newTypeToken<List<Person>>(){}.getType(); 这句代码表示创建一个 TypeToken的匿名子类对象,并调用对象的getType()方法.

    org.json包和gson库还有很多其他有用的API,需要的时候可查看文档. 比如有的时候需要通过java对象或java集合和数组生成json数据上传给服务器,当然你可以自我构造json字符串,但会很麻烦. 这个时候就可以使用其中的有关API,方便的完成这项工作.

    参考资料:

    http://bantouyan.iteye.com/category/143891

    http://bantouyan.iteye.com/blog/962448

    http://json-lib.sourceforge.net/apidocs/jdk15/index.html

    http://fuchangle.iteye.com/blog/1488039

    (编辑:李大同)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

      推荐文章
        热点阅读