码迷,mamicode.com
首页 > Web开发 > 详细

JSON数据格式与 解析

时间:2015-06-29 20:13:41      阅读:524      评论:0      收藏:0      [点我收藏+]

标签:

一、JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。  JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。

二、JSON的两种结构:

1、“名称/值”对的集合。

2、值的有序列表,一般称为数组。

JSON具有以下这些形式:

对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。

技术分享

 

数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。

 

技术分享

 

值(value)可以是双引号括起来的字符串(string)、数值(number)、truefalsenull、对象(object)或者数组(array)。这些结构可以嵌套。

技术分享

字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。

字符串(string)与C或者Java的字符串非常相似。

技术分享

数值(number)也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。

技术分享

 

空白可以加入到任何符号之间。

以上 – Json.org。

 

三、JSON的复杂结构。

这里有某个网站返回数据如下:

{"showapi_res_code":0,"showapi_res_error":"","showapi_res_body":{"list":[{"p0":"6.07","p90":"6.4","p93":"6.5","p97":"6.94","prov":"辽宁"}],"ret_code":0}}

其数据结构如下

技术分享

 

 

在Java中生成此数据,可以更好的理解JSON的数据结构。

代码如下:

先定义个Prov类:

package com.example.test;
public class Prov
{
    private String p0, p90, p93, p97,prov;  //每个变量的名字和网站得到的JSON数据的名字对应,否则不能正确解析数据。生成的数据格式一样,但 名称/值 中的名称不一样。



    public String getProv()
    {
        return prov;
    }

    public void setProv(String prov)
    {
        this.prov = prov;
    }

    public String getP0()
    {
        return p0;
    }

    public void setP0(String p0)
    {
        this.p0 = p0;
    }

    public String getP90()
    {
        return p90;
    }

    public void setP90(String p90)
    {
        this.p90 = p90;
    }

    public String getP93()
    {
        return p93;
    }

    public void setP93(String p93)
    {
        this.p93 = p93;
    }

    public String getP97()
    {
        return p97;
    }

    public void setP97(String p97)
    {
        this.p97 = p97;
    }

}

其上一层的Body类:

package com.example.test;

import java.util.List;

public class Body
{
    private String ret_code;
    private List<com.example.test.Prov> list;//这里名字用list,和网站得到的JSON数据对应名字。否则格式生成的数据格式一样,但名字一样。解析JSON数据时,也不能正确解析。

    public String getRet_code()
    {
        return ret_code;
    }

    public void setRet_code(String ret_code)
    {
        this.ret_code = ret_code;
    }

    public List<com.example.test.Prov> getProv()
    {
        return list;
    }

    public void setProv(List<com.example.test.Prov> prov)
    {
        this.list = prov;
    }

}

 

再上一层的数据ListData类

package com.example.test;


public class ListData
{
    //同上面两个相同,定义变量的名字要和JSON里的一致。
    private String  showapi_res_code,showapi_res_error;
    private Body showapi_res_body;

    public String getShowapi_res_code()
    {
        return showapi_res_code;
    }

    public void setShowapi_res_code(String showapi_res_code)
    {
        this.showapi_res_code = showapi_res_code;
    }

    public String getShowapi_res_error()
    {
        return showapi_res_error;
    }

    public void setShowapi_res_error(String showapi_res_error)
    {
        this.showapi_res_error = showapi_res_error;
    }

    public Body getShowapi_res_body()
    {
        return showapi_res_body;
    }

    public void setShowapi_res_body(Body showapi_res_body)
    {
        this.showapi_res_body = showapi_res_body;
    }
    
}

 

最好,在main中处理JSON数据

package com.example.test;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.TextView;

import com.google.gson.Gson;
import com.show.api.ShowApiRequest;

public class MainActivity extends Activity implements OnClickListener
{
    private Button btn;
    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

        textView = (TextView) findViewById(R.id.textview);
        btn = (Button) findViewById(R.id.btn);

        btn.setOnClickListener(this);

        String res = new ShowApiRequest("http://route.showapi.com/138-46", "1255", "9b8cc3f4086048b8a506d731d1af0a9c")
                .addTextPara("prov", "辽宁").post();

        System.out.println(res);

        // ------------将对象专程JSON数据---开始

        com.example.test.Prov prov = new com.example.test.Prov();
        prov.setP0("6.07");
        prov.setP90("6.4");
        prov.setP93("6.5");
        prov.setP97("6.97");
        prov.setProv("辽宁");

        List<com.example.test.Prov> provlist = new ArrayList<com.example.test.Prov>();
        provlist.add(prov);

        Body body = new Body();
        body.setRet_code("0");
        body.setProv(provlist);

        ListData listData = new ListData();

        listData.setShowapi_res_body(body);
        listData.setShowapi_res_error("");
        listData.setShowapi_res_code("0");

        Gson gson = new Gson();
        String s = gson.toJson(listData);

        System.out.println(s);

        // ------------将对象专程JSON数据---结束

        // ----------------解析JSON数据 ---开始
        ListData listDatas = gson.fromJson(res, ListData.class);
        String showapi_res_code = listDatas.getShowapi_res_code();
        String showapi_res_error = listDatas.getShowapi_res_error();
        Body body2 = listDatas.getShowapi_res_body();
        System.out.println("showapi_res_code = " + showapi_res_code + "           " + "showapi_res_error = "
                + showapi_res_error + "              ret_code=" + body2.getRet_code());

        List<Prov> prov2 = body2.getProv();

        for (Prov prov1 : prov2)
        {
            System.out.println(prov1.getP93() + "       " + prov1.getProv());
        }
        // ----------------------解析JSON数据结束
    }

    @Override
    public void onClick(View v)
    {
        switch (v.getId())
        {
        case R.id.btn:
            textView.setText("a");
            break;

        default:
            break;
        }
    }

}

JSON数据格式与 解析

标签:

原文地址:http://www.cnblogs.com/qq28902581/p/4608221.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!