JSON数据格式与 解析

一、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;
        }
    }

}
时间: 2024-11-16 23:37:12

JSON数据格式与 解析的相关文章

xml 和json 数据格式及解析

来源:http://blog.jobbole.com/79252/ 引言 NOKIA 有句著名的广告语:“科技以人为本”.任何技术都是为了满足人的生产生活需要而产生的.具体到小小的一个手机,里面蕴含的技术也是浩如烟海,是几千年来人类科技的结晶,单个人穷其一生也未必能掌握其一角.不过个人一直认为基本的技术和思想是放之四海而皆准的,许多技术未必需要我们从头到尾再研究一遍,我们要做的就是站在巨人的肩膀上,利用其成果来为人们的需求服务. 随着移动互联网时代的大潮,越来越多的App不光是需要和网络服务器进

【Android开发经验】Json数据格式介绍、使用Android自带类库完成Json生成与解析

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 因为在之前的项目中,xml和json数据格式都有使用过,所以对json格式的简单.高效的特点印象深刻.如果使用json语言进行开发,强烈推荐使用json数据格式! JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成.  JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#,

JS中将JSON的字符串解析成JSON数据格式《转》

在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. 使用eval函数来解析,并且使用jquery的each方法来遍历 用jquery解析JSON数据的方法,作为jquery异步请求的传输对象,jquery请求后返回的结果是json对象,这里考虑的都是服务器返回JSON形式的字符串的形式,对于利用JSONObject等插件封装的JSON对象,与此亦是大同小异,这里不再做说明. 这里首先给出JSON字符

Android学习系列(20)--App数据格式之解析Json

JSON数据格式,在Android中被广泛运用于客户端和网络(或者说服务器)通信,非常有必要系统的了解学习.     恰逢本人最近对json做了一个简单的学习,特此总结一下,以飨各位.     为了文章简明清晰,尽量多列点,少废话.     参考文档:http://www.ietf.org/rfc/rfc4627.txt?number=4627 1.JSON解析     (1).解析Object之一: 1 {"url":"http://www.cnblogs.com/qian

android 解析json数据格式(转)

json数据格式解析我自己分为两种: 一种是普通的,一种是带有数组形式的: 普通形式的:服务器端返回的json数据格式如下: {"userbean":{"Uid":"100196","Showname":"\u75af\u72c2\u7684\u7334\u5b50","Avtar":null,"State":1}} 分析代码如下: // TODO 状态处理 500

json数据格式和gson解析json的应用

首先json的数据格式分为三种:数组.对象.数组对象混合 数组格式: {"asd","qwe","ffe"} 对象格式: {"a":1,"b":2,"c":3}  注意写代码中要加入转义字符\来获取双引号:\" 数组对象混合格式: {   [ {"a":1,"b":2}, {"c":3,"d":4}

IOS 阶段学习第22天笔记(JSON数据格式)

IOS学习(OC语言)知识点整理 一.JSON数据格式 1)概念:json是一种网络数据传输格式,有值/对象:{“A”:1,”B”:”2”…}词典:对象的序列:[,,,,,]数组两种数据类型 2)URLWithString 将字符串网址封装成NSURL对象 例如: 1 NSString *urlStr=@"http://10.0.8.8/sns/my/user_list.php?number=20 2 &page=";//get post 3 NSURL *url=[NSURL

[ajax 学习笔记] json数据格式

之前写过ajax传送数据可以用普通文本和XML两种格式.这里记一下json数据格式. json:javascript object notation. 之前分析过,用文本和XML传送数据各有优劣.而json可以轻松地将javascript对象转换成可以随时发送的数据. 一个json数据例子: var people = { "programmers": [ { "firstName": "Brett", "lastName":&

JSON 数据格式

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言.易于人阅读和编写,同时也易于机器解析和生成. 基础结构 JSON建构于两种结构: 1. “名称/值”对的集合(A collection of name/value pairs).不同的语言中,它被理解为对象(object),记录(record),结构(struct),字典(dictionary),哈希表(hash table