json原生解析

身为新手,在运用网络解析json数据的时候,发现先会用Gson等框架解析json,然后就懒起来学原生解析了,这下在看别人写的demo的时候就尴尬了,一块块的,不懂写什么,气氛十分尴尬。

不多说,先来条好bolg的链接:http://blog.csdn.net/android_lyp/article/details/52072822

JSON对数据的描述形式,既然是形式,那么它的数据形式是什么样的:

    • 对象的描述是: {}
    • 数组的描述是: []
    • 属性或值的描述是: “”
    • 连接之间的描述是: :
  • 手动创建javaBean对象的看JSON数据,请记住:拿到一些JSON数据,首先看符号, 有个原则,从外到内看,看到{}这个是个对象,就创建对象,看到[]就创建数据,
  • 但是这里有个问题,看![{},{}],这个看,1. 创建一个List容器 2. 再看里面,{}就创建对象,说明这个容器的泛型就是这个对象

原生解析个人不推荐用,因为加载数据的性能比较低,如果写的界面适配器写的不好等因素加起来的话,加载数据就很慢很慢,现在有很多热门的库类例如Gson等等

Activity中的网络解析(因为没用框架,所以代码会臃肿但是方便开发 ,不利于后面维护)

package com.tfot.hotel.yichengyiyu.Activity.zhou_activity;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;

import com.squareup.okhttp.Call;
import com.squareup.okhttp.FormEncodingBuilder;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.RequestBody;
import com.squareup.okhttp.Response;
import com.tfot.hotel.yichengyiyu.Activity.NewActivivty.XiangQingActivity;
import com.tfot.hotel.yichengyiyu.Activity.NewActivivty.XiangQingActivity_Long;
import com.tfot.hotel.yichengyiyu.Activity.zhou_activity.adapter.ChaXunJieGuoAdapter;
import com.tfot.hotel.yichengyiyu.Activity.zhou_activity.bean.ChaXunJieGuo;
import com.tfot.hotel.yichengyiyu.R;
import com.tfot.hotel.yichengyiyu.Util.Common;
import com.tfot.hotel.yichengyiyu.Util.base.BaseActivity;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import rx.Observable;
import rx.Observer;
import rx.Subscriber;
import rx.Subscription;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
import rx.subscriptions.CompositeSubscription;

/**
 * 查询结果界面
 * Created by huizhou on 2017/6/26.
 */

public class ChaXunJieGuoActivity extends BaseActivity {
    private List<ChaXunJieGuo> chaXunJieGuoList=new ArrayList<>();  //查询结果数据源
    private String  changOrduang ;// CONDITION  判断长租或者短租的字符串
    private Boolean yeOrNo = false ;//查询内容是否存在
    private String sousuoneiron;
    private ListView activity_chaxunjieguo_list;
    private ImageView activivty_chaxunjieguo_fanhuui;
    private ChaXunJieGuoAdapter chaXunJieGuoAdapter;
    private View kongbaiye_sousuo;

    private CompositeSubscription mCompositeSubscription;//第三方线程
    private final OkHttpClient client = new OkHttpClient();
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chaxunjieguo_l);
        Intent intent = getIntent();
        Bundle bundle=intent.getExtras();//.getExtras()得到intent所附带的额外数据
        changOrduang = bundle.getString("changOrduang");
        sousuoneiron = bundle.getString("sousuojieguoneiron");
        initData();

    }

    private void initData() {

        mCompositeSubscription = new CompositeSubscription(); //第三方线程

        activity_chaxunjieguo_list  = (ListView) findViewById(R.id.activity_chaxunjieguo_list);
        activivty_chaxunjieguo_fanhuui = (ImageView) findViewById(R.id.activivty_chaxunjieguo_fanhuui);

        kongbaiye_sousuo = findViewById(R.id.kongbaiye_sousuo); //空白页

        chaxunjieguo(sousuoneiron);
        chaXunJieGuoAdapter = new ChaXunJieGuoAdapter(ChaXunJieGuoActivity.this,chaXunJieGuoList);
        activity_chaxunjieguo_list.setAdapter(chaXunJieGuoAdapter);

        activity_chaxunjieguo_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                //TODO  查询条目跳转
                Intent  intent =null;
                if(changOrduang.equals("day")){
                    intent = new Intent(ChaXunJieGuoActivity.this, XiangQingActivity.class);  //短租的房间详情页
                }else if(changOrduang.equals("long")){
                    intent = new Intent(ChaXunJieGuoActivity.this, XiangQingActivity_Long.class);  //长租的房间详情页
                }
                Bundle bundle = new Bundle();
                bundle.putString("RoomStyleId",chaXunJieGuoList.get(position).getRoomStyleId());
                bundle.putString("Brandname",chaXunJieGuoList.get(position).getBrandname());
                intent.putExtras(bundle);
                startActivity(intent);

            }
        });

        activivty_chaxunjieguo_fanhuui.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

    }

    //查询结果的的网路连接
    private void chaxunjieguo(final String chaxuneironB){
        Subscription subscription = Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {
                RequestBody formBody = new FormEncodingBuilder()
                        .add("ACT", "likesearch")
                        .add("CONDITION",changOrduang)
                        .add("content",chaxuneironB)
                        .build();

                final Request request = new Request.Builder()
                        .url(Common.NEW_CHAXUNJIEGUO)
                        .post(formBody)
                        .build();

                Call call = client.newCall(request);
                try {
                    Response response = call.execute();
                    subscriber.onNext(response.body().string());
                    subscriber.onCompleted();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<String>() {
                    @Override
                    public void onCompleted() {
                    }
                    @Override
                    public void onError(Throwable e) {
                    }
                    @Override
                    public void onNext(String s) {
                        //原生解析
                        try {
                            JSONArray array = new JSONArray(s);
                            chaXunJieGuoList.clear();
                            for (int i = 0; i < array.length(); i++) {
                                JSONObject temp = (JSONObject) array.get(i);
                                String RoomStyleId=temp.getString("RoomStyleId");
                                String Unitprice=temp.getString("Unitprice");
                                String evaluate=temp.getString("evaluate");
                                JSONObject banner=temp.getJSONObject("Brand");

                                String Brandname=banner.getString("Brandname");

                                JSONArray jsonArray=temp.getJSONArray("RoomStyleImage");
                                ArrayList<String> RoomStyleImage=new ArrayList<String>();
                                for (int i2=0;i2<jsonArray.length();i2++){
                                    String a= Common.BASIC_IC_API+jsonArray.get(i).toString();
                                    RoomStyleImage.add(a);
                                }
                                String RoomStyleAddres=temp.getString("RoomStyleAddres");
                                String Roomlongrentom=temp.getString("Roomlongrentom");
                                String RoomStyleName = temp.getString("RoomStyleName");
                                String RoomStar = temp.getString("RoomStar");
                                ChaXunJieGuo chaXunJieGuoData = new ChaXunJieGuo(RoomStyleId,Unitprice,
                                        evaluate, Brandname,RoomStyleImage,RoomStyleAddres,Roomlongrentom,RoomStyleName,RoomStar);
                                chaXunJieGuoList.add(chaXunJieGuoData);
                            }
                             if(!chaXunJieGuoList.isEmpty()){
                                 kongbaiye_sousuo.setVisibility(View.GONE);
                                 activity_chaxunjieguo_list.setVisibility(View.VISIBLE);
                             }else{
                                 kongbaiye_sousuo.setVisibility(View.VISIBLE);
                                 activity_chaxunjieguo_list.setVisibility(View.GONE);
                             }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                        chaXunJieGuoAdapter.notifyDataSetChanged();
                    }
                });
        mCompositeSubscription.add(subscription);
    }
}

bean

package com.tfot.hotel.yichengyiyu.Activity.zhou_activity.bean;

import java.io.Serializable;
import java.util.ArrayList;

/**
 * Created by huizhou on 2017/6/26.
 */

public class ChaXunJieGuo implements Serializable {
    private String RoomStyleId;
    private String Unitprice;
    private String evaluate;
    private String Brandname;
    private ArrayList<String> RoomStyleImage;
    private String RoomStyleAddres;
    private String Roomlongrentom;
    private String RoomStyleName;
    private String RoomStar;

    public String getRoomStyleName() {
        return RoomStyleName;
    }

    public void setRoomStyleName(String roomStyleName) {
        RoomStyleName = roomStyleName;
    }

    public ChaXunJieGuo(String roomStyleId, String unitprice, String evaluate, String brandname,ArrayList<String> roomStyleImage, String roomStyleAddres, String roomlongrentom,String roomStyleName,String roomStar) {
        RoomStyleId = roomStyleId;
        Unitprice = unitprice;
        this.evaluate = evaluate;
        Brandname = brandname;
        RoomStyleImage = roomStyleImage;
        RoomStyleAddres = roomStyleAddres;
        Roomlongrentom = roomlongrentom;
        RoomStyleName = roomStyleName;
        RoomStar = roomStar;
    }

    public String getRoomStar() {
        return RoomStar;
    }

    public void setRoomStar(String roomStar) {
        RoomStar = roomStar;
    }

    public String getRoomStyleId() {
        return RoomStyleId;
    }

    public void setRoomStyleId(String roomStyleId) {
        RoomStyleId = roomStyleId;
    }

    public String getUnitprice() {
        return Unitprice;
    }

    public void setUnitprice(String unitprice) {
        Unitprice = unitprice;
    }

    public String getEvaluate() {
        return evaluate;
    }

    public void setEvaluate(String evaluate) {
        this.evaluate = evaluate;
    }

    public String getBrandname() {
        return Brandname;
    }

    public void setBrandname(String brandname) {
        Brandname = brandname;
    }

    public ArrayList<String>  getRoomStyleImage() {
        return RoomStyleImage;
    }

    public void setRoomStyleImage(ArrayList<String>  brandbigimage) {
        RoomStyleImage = brandbigimage;
    }

    public String getRoomStyleAddres() {
        return RoomStyleAddres;
    }

    public void setRoomStyleAddres(String roomStyleAddres) {
        RoomStyleAddres = roomStyleAddres;
    }

    public String getRoomlongrentom() {
        return Roomlongrentom;
    }

    public void setRoomlongrentom(String roomlongrentom) {
        Roomlongrentom = roomlongrentom;
    }

    @Override
    public String toString() {
        return "ChaXunJieGuo{" +
                "RoomStyleId=‘" + RoomStyleId + ‘\‘‘ +
                ", Unitprice=‘" + Unitprice + ‘\‘‘ +
                ", evaluate=‘" + evaluate + ‘\‘‘ +
                ", Brandname=‘" + Brandname + ‘\‘‘ +
                ", RoomStyleImage=" + RoomStyleImage +
                ", RoomStyleAddres=‘" + RoomStyleAddres + ‘\‘‘ +
                ", Roomlongrentom=‘" + Roomlongrentom + ‘\‘‘ +
                ", RoomStyleName=‘" + RoomStyleName + ‘\‘‘ +
                ", RoomStar=‘" + RoomStar + ‘\‘‘ +
                ‘}‘;
    }
}

其实,后台传来的数据不止那么少对象,我们来看看后台传过来的json格式是什么

[
    {
        "RoomStyleId":"51",
        "RoomStyleName":"商务双床",
        "RoomStyleAddres":"佛山市南海区桂澜北路万达广场C座",
        "RoomStylePrice":"2720",
        "RoomStyleguarantee":"3860",
        "RoomStyleLng":"113.156684",
        "RoomStyleLat":"23.063305",
        "RoomStyleSize":"58",
        "RoomStyleHall":"1",
        "RoomStyleRoom":"1",
        "RoomStyleToilet":"1",
        "RoomStyleEquipage":[
            "无线WIFI",
            "二十四小时热水",
            "二十四小时小时监控",
            "床上用品",
            "冰箱",
            "电视",
            "二十四小时小时保安值守",
            "空调",
            "停车场",
            "前台问询"
        ],
        "RoomStylePlan":[
            {
                "duration":"12",
                "price":"2720",
                "discount":"0.95",
                "total":"2584"
            },
            {
                "duration":"11",
                "price":"2750",
                "discount":"0.95",
                "total":"2613"
            },
            {
                "duration":"10",
                "price":"2780",
                "discount":"0.95",
                "total":"2641"
            },
            {
                "duration":"9",
                "price":"2800",
                "discount":"0.95",
                "total":"2660"
            },
            {
                "duration":"8",
                "price":"2830",
                "discount":"0.95",
                "total":"2689"
            },
            {
                "duration":"7",
                "price":"2860",
                "discount":"0.95",
                "total":"2717"
            },
            {
                "duration":"6",
                "price":"3150",
                "discount":"0.95",
                "total":"2993"
            },
            {
                "duration":"5",
                "price":"3290",
                "discount":"0.95",
                "total":"3126"
            },
            {
                "duration":"4",
                "price":"3430",
                "discount":"0.95",
                "total":"3259"
            },
            {
                "duration":"3",
                "price":"3580",
                "discount":"0.95",
                "total":"3401"
            },
            {
                "duration":"2",
                "price":"3720",
                "discount":"0.95",
                "total":"3534"
            },
            {
                "duration":"1",
                "price":"3860",
                "discount":"0.95",
                "total":"3667"
            }
        ],
        "RoomStyleMemo":"2513酒店公寓",
        "RoomStyleCItyID":"29",
        "RoomStyleProvince":"广东省",
        "RoomStyleCIty":"佛山市",
        "RoomStyleCounty":"南海区",
        "DayDeposit":"100",
        "Roomlongrentom":"105",
        "RoomStyleImage":[
            "./uploadimages/59488cab6c39b.jpg",
            "./uploadimages/59488cae23476.jpg",
            "./uploadimages/59488cb110cb8.jpg",
            "./uploadimages/59488cb3ef3cb.jpg"
        ],
        "Brand":{
            "Brandid":"4",
            "Brandname":"2513酒店公寓",
            "Brandmemo":"2513酒店公寓",
            "Brandimage":"./uploadimages/5948e73f7f744.png",
            "Brandbigimage":"./uploadimages/5948e72801409.jpg",
            "Brandminiimage":"./uploadimages/5948e738cc353.png",
            "":"./uploadimages/5948e746c84b4.png"
        },
        "Unitprice":"218",
        "RoomStar":"5",
        "evaluate":"10",
        "RoomServerManager":{
            "ServerManagerId":"16",
            "ServerManagerImage":"./uploadimages/58b0f4e08c3f0.png",
            "ServerManagerName":"吴柯丽",
            "ServerManagerPhoneNumber":"18675739089",
            "ServerManagerMemo":"南海管家"
        }
    }]

这样的json数据就只是需要几个属性,不用全部拿取,所以原生解析可以很快取得,Gson要实体类多,但是可以很快取得数据,还有让代码简洁。

以下附上Gson解析json的例子传送门:http://blog.csdn.net/tkwxty/article/details/34474501/

时间: 2024-11-06 06:32:39

json原生解析的相关文章

Android JSON原生解析的几种思路,以号码归属地,笑话大全,天气预报为例演示

Android JSON原生解析的几种思路,以天气预报为例 今天项目中要实现一个天气的预览,加载的信息很多,字段也很多,所以理清了一下思路,准备独立出来写一个总结,这样对大家还是很有帮助的,老司机要开车了 涉及到网络,你就一定要先添加权限,准没错 <!--网络权限--> <uses-permission android:name="android.permission.INTERNET" /> 一.归属地查询(JSONObject) 这个也是最简单的一类Json

json原生解析jsonObject和jsonArray

public void jsonParse() throws JSONException{ String jsonStr = "{'name':'zhangsan','age':'19'}"; JSONObject jobj = new JSONObject(jsonStr); String name = jobj.getString("name"); // String age = jobj.getString("age"); int age

Android原生生成JSON与解析JSON

JSON数据是一种轻量级的数据交换格式,在Android中通常应用于客户端与服务器交互之间的数据传输.像现在在网上有很多解析JSON数据的jar包,但是归根到底用的都是Android原生解析JSON数据的方式,所以掌握Android原生解析JSON数据的方法相当重要. 下面分为生成JSON数据和解析JSON数据,所用的包是org.json (1)生成JSON数据方法: 比如要生成一个这样的json文本 { "phone" : ["12345678", "8

Delphi XE6 原生解析json

Delphi XE5带了system.json单元,原生提供了json支持类.下面是解析json用法说明: 最简单的JSON大致像这样 { "date":"周二(今天, 实时:12℃)", "dayPictureUrl":"http://api.map.baidu.com/images/weather/day/duoyun.png", "nightPictureUrl":"http://api.m

[转]JSon数据解析的四种方式

转至http://blog.csdn.net/enuola/article/details/7903632 作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此"http://www.bejson.com/"网站来进行JSON格式化校验(点击打开链接).此网站不仅可以检测Json代码中的错误,而且可以以视图形式显示json中的数据内容,很是方便. 从IOS5开始,APPLE提供了对json的原生支持(NSJSONS

《JAVASCRIPT高级程序设计》JSON语法/解析/序列化

JSON是一种数据格式,不是一种编程语言. 一.语法 JSON语法可以表示以下三种类型的值:简单值.对象.数组. 1.简单值 最简单的JSON数据值就是简单值: 5 "hello world" 2.对象 JSON对象与JAVASCRIPT字面量有些不同,以下是javascript中的对象字面量: // 表示方法1 var person = { name:"Lillian", age:24 }; // 表示方法2 var person1 = { "name&

JSON的解析和序列化

背景:XML曾经是互联网传输结构化数据的事实标准,但XML过于繁琐.冗长,而且解析麻烦,同XML数据结构要解析成DOM文档而且从中提取数据极为麻烦相比,JSON可以解析为JavaScript对象的优势极其明显.相比之下,JOSN是在JavaScript中读写结构化数据更好的方式,可以把JSON字符串直接传给eval(),而且不必创建DOM对象.JSON是一种数据格式,很多编程语言都有针对JOSN的解析器和序列化器. 一.JSON为JavaScript子集,可以使用eval解析JSON字符串,并返

iOS开发——XML/JSON数据解析

除了XML和Json,文中还涉及到的一些知识:第三方类库的使用,获取本地文件内容,网站API使用,GCD多线程编程,不做详细介绍,在代码出现的地方会注明. 先安利一波: Json XML 大数据时代,我们需要从网络中获取海量的新鲜的各种信息,就不免要跟着两个家伙打交道,这是两种结构化的数据交换格式.一般来讲,我们会从网络获取XML或者Json格式的数据,这些数据有着特定的数据结构,必须对其进行解析,得到我们可以处理的数据.所谓“解析”,就是从事先规定好的格式串中提取数据.解析的前提是数据的提供方

json数据解析重要的一点

今天在讨论json数据时,又学到了一点.因为平时都忽略了.所以打个笔记记下来:json的解析方法共有兩種:1. eval() ; 2.JSON.parse(). //第一种eval的使用var evalJson = eval('(' + jsonstr + ')');// 第二种JSON.parsevar JSONParseJson = JSON.parse(jsonstr); 重点!!!两者的区别:  var parse_json_by_eval = function(str) {