JSON在各种语言中的运用

1. JSON数据格式

JSON(JavaScript Object Notation)

从结构上看,所有的数据最终都可以分成三种类型: 
第一种类型是scalar(标量),也就是一个单独的string(字符串)或数字(numbers),比如“北京”这个单独的词。 
第二种类型是sequence(序列)/array(数组)/List(列表),称作JSON数组,也就是若干个相关的数据按照一定顺序并列在一起,比如“北京,东京”。

第三种类型是mapping(映射)/hash(散列)/dictionary(字典),称作JSON对象,也就是一个名/值对(Name/value),在JSON中称作“对象”比如“首都:北京”。

可以作以下理解:

1.数组用“[]”创建,对象用“{}”创建;

2.无论是数组还是对象,之间的元素都用“,”隔开;

3.对象内部,(属性的)名称和值用“:”隔开,并且必须要用“:”隔开,不可单独存在属性名或者值;

4.对象和数组可以互相嵌套

JSON是以文本,即字符串的形式传递的,可以把JSON理解为内容需要满足特定格式书写的字符串。而在各种编程语言中,我们要将JSON字符串转换成各种语言中的变量,进行操作。以下就将一一介绍。

2.
PHP中使用JSON

2.1 PHP构造JSON(即,将PHP对象转化成JSON字符串)

例1:create
json object

$info = array(‘number‘=>‘2‘,‘names‘=>array(‘Everyday Updates‘,‘Hot Pictures‘,‘Latest Technology‘,‘Information‘,‘Product Pictures‘,‘Brands‘));
$json = json_encode($info);

结果:

{"number":"2","names":["Everyday Updates","Hot Pictures","Latest Technology","Information","Product Pictures","Brands"]}

例2:create json array

$array = array (0 => "Eric", 1 => 23);   echo json_encode($array);

程序将打印出 :["Eric",23]

注解:PHP中

1.数组,对象都用array创建,如果array中只有值,或者array键值对中的键是数字,则被转作JSON中的数组,如果array键值对中的键是字符串,那么被转作JSON中的对象;

2.无论是数组还是对象,之间的元素都用“,”隔开;

3.对象内部,(属性的)名称和值用“=>”隔开;

2.2 PHP使用JSON(即,将JSON字符串转化成PHP对象)

例1:

$json = ‘{"foo-bar": 12345}‘;
$obj = json_decode($json);
print $obj->{‘foo-bar‘}; // 12345

注解:在不知道JSON格式的时候,可以用var_dump(json_decode($str));来查看转换后的情况

3. JS中使用JSON

3.1 JS构造JSON字符串

//法I:写成去掉引号的字符串
var jsonObj = {number:6,names:[{name: “DAILY UPDATES”}, {name: “POPULAR PICTURES”}]};
var jsonText = JSON.stringify(jsonObj);

//法II:适用于数组元素很多的情况,可以动态添加数组元素
//get the request json data of the client
    var totalNumOfPictures = 17;
    var numInOnePage = req.body.number; //number of pictures in one page
    var startIndex = req.body.startIndex;

// create picture array
    var pictures = [];
    var picture = new Object();
    picture.name = "Vol.1";
    picture.url = "http://t2.baidu.com/it/u=1790018557,3075089305&fm=21&gp=0.jpg";
    pictures.push(picture); //create array dynamically

    picture = new Object();
    picture.name = "Vol.2";
    picture.url = "http://t2.baidu.com/it/u=2602371353,2521141668&fm=21&gp=0.jpg";
    pictures.push(picture);

    picture = new Object();
    picture.name = "Vol.3";
    picture.url = "http://t3.baidu.com/it/u=2280986867,1567705443&fm=21&gp=0.jpg";
    pictures.push(picture);

    picture = new Object();
    picture.name = "Vol.4";
    picture.url = "http://t3.baidu.com/it/u=1821458190,3818067678&fm=21&gp=0.jpg";
    pictures.push(picture);

    picture = new Object();
    picture.name = "Vol.5";
    picture.url = "http://t2.baidu.com/it/u=472744134,2285846599&fm=21&gp=0.jpg";
    pictures.push(picture);

    picture = new Object();
    picture.name = "Vol.6";
    picture.url = "http://t2.baidu.com/it/u=3957952154,3084688128&fm=21&gp=0.jpg";
    pictures.push(picture);

    picture = new Object();
    picture.name = "Vol.7";
    picture.url = "http://t1.baidu.com/it/u=2291760722,2270589689&fm=21&gp=0.jpg";
    pictures.push(picture);

    picture = new Object();
    picture.name = "Vol.8";
    picture.url = "http://t3.baidu.com/it/u=2759709517,445035895&fm=21&gp=0.jpg";
    pictures.push(picture);

    picture = new Object();
    picture.name = "Vol.9";
    picture.url = "http://t1.baidu.com/it/u=812989780,2797001786&fm=23&gp=0.jpg";
    pictures.push(picture);

    picture = new Object();
    picture.name = "Vol.10";
    picture.url = "http://i3.hunantv.com/p1/20121127/1058553836.jpg";
    pictures.push(picture);

    picture = new Object();
    picture.name = "Vol.11";
    picture.url = "http://img.21cbh.com/uploadfile/2012/0824/20120824013832913.jpg";
    pictures.push(picture);

    picture = new Object();
    picture.name = "Vol.12";
    picture.url = "http://i3.cnfolimg.com/auto/3_906048.jpg";
    pictures.push(picture);

    picture = new Object();
    picture.name = "Vol.13";
    picture.url = "http://pic.yesky.com/imagelist/08/12/8093046_5924.jpg";
    pictures.push(picture);

    picture = new Object();
    picture.name = "Vol.14";
    picture.url = "http://www.autotimes.com.cn/upload/admin/images/chezhan/beijing/2012/model/bsj-5.jpg";
    pictures.push(picture);

    picture = new Object();
    picture.name = "Vol.15";
    picture.url = "http://i3.cqnews.net/news/attachement/jpg/site82/2011-04-29/5356167799388589428.jpg";
    pictures.push(picture);

    picture = new Object();
    picture.name = "Vol.16";
    picture.url = "http://img.shendu.com/forum/201212/27/115921b05wp2ah1sg46bqa.jpg";
    pictures.push(picture);

    picture = new Object();
    picture.name = "Vol.17";
    picture.url = "http://www.atv.com.cn/bbs/data/attachment/forum/201105/28/160747a1ydwwcccwyhjuhj.jpg";
    pictures.push(picture);

    picture = new Object();
    picture.name = "Vol.18";
    picture.url = "http://jpp2.imghb.com/pic/pic/12/37/21/1423016512372180_a602x602.jpg";
    pictures.push(picture);

//create json data
    var json = new Object();
    json.numOfPages = 2;
    json.number = numInOnePage;

    var pictureJson = [];
    for(var i = startIndex; i < startIndex+json.number; i++)
    {
        pictureJson.push(pictures[i]);
    }
    json.pictures = pictureJson;

    if(req.body.id==100){
        res.send(JSON.stringify(json));
    }

3.2 JSON字符串转成JS对象

JSON字符串:

  var str1 = ‘{ "name": "cxh", "sex": "man" }‘;

JS对象:

var str2 = { "name": "cxh", "sex": "man" };

由JSON字符串转换为JS对象

(法I)
 var
obj = eval_r(‘(‘ + str + ‘)‘);

解释:由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语

句(statement)来执行。

(法II)
var obj = str.parseJSON();

(法III) var
obj = JSON.parse(str);

然后str.name

4. Java中使用JSON

4.1
JAVA构造JSON字符串

写成string就行

String requestContent = "{"id":"1","sort":"des","number":"9","startIndex":"1"}";
try {
           StringEntity entity = new StringEntity(requestContent);
           entity.setContentEncoding("UTF-8");
           entity.setContentType("application/json"); //set the request content type as JSON
           httpPost.setEntity(entity);
} catch (UnsupportedEncodingException e1) {
           e1.printStackTrace();
}
httpResponse=httpClient.execute(httpPost);

4.2 将JSON字符串转化成Java对象(JSON Object 或者JSONArray)

//如果是{
JSONObject obj = new JSONObject(response);
//如果class后面是=>[
JSONArray array = obj.getJSONArray("class");
//从JSONArray获得JSONObject
JSONObject obj = array.getJSONObject(0);

判断键/值对是否存在

if ( jObj.has("identity") ) ...

 

时间: 2024-10-06 09:03:07

JSON在各种语言中的运用的相关文章

在 Swift 语言中更好的处理 JSON 数据:SwiftyJSON

SwiftyJSON能够让在Swift语言中更加简便处理JSON数据. With SwiftyJSON all you have to do is: ? 1 2 3 4 let json = JSONValue(dataFromNetworking) if let userName = json[0]["user"]["name"].string{   //Now you got your value } And don't worry about the Opti

Swift语言中如何使用JSON数据教程

原文:Swift语言中如何使用JSON数据教程 这是一篇翻译文章,原文出处:http://www.raywenderlich.com/82706/working-with-json-in-swift-tutorial JSON(全称:JavaScript Object Notation),是网络服务中传输数据的常用方法,JSON因为容易使用,且可读性强, 所以非常受到欢迎. 下面是个JSON的一个片段: [ {"person": {"name":"Dani

(转)使用 CJSON 在C语言中进行 JSON 的创建和解析的实例讲解

使用 CJSON 在C语言中进行 JSON 的创建和解析的实例讲解 本文用代码简单介绍cjson的使用方法,1)创建json,从json中获取数据.2)创建json数组和解析json数组 1. 创建json,从json中获取数据 1 #include <stdio.h> 2 #include "cJSON.h" 3 4 char * makeJson() 5 { 6 cJSON * pJsonRoot = NULL; 7 8 pJsonRoot = cJSON_Create

在 go/golang语言中使用 google Protocol Buffer

怎么在go语言中实用google protocol Buffer呢? 现在的潮流趋势就是一键搞定,跟ubuntu安装软件一样 go get code.google.com/p/goprotobuf/{proto,protoc-gen-go} go install  code.google.com/p/goprotobuf/proto 搞定,可以在 $GO_PATH/bin下找到 protoc-gen-go 这个程序,那么就可以实用protoc-gen-go 进行go语言的proto文件的自动生成

从头开始-04.C语言中流程控制

分支结构: if语句:当条表达式满足的时候就执行if后面大括号中语句 三种格式: if,if else , if else if else 特点:1.只有一个代码块会被执行 2.若有else那么必有一个代码会被执行 3.一个if语句中只能以if开头,最多只能有一个else,可以有任意个else if switch(表达式){ case 常量: ... break; case 常量1: ... break; default: ... break; } : 使用场景:当一个变量只有几个固定的取值的时

sqlite学习笔记8:C语言中使用sqlite之创建表

前面已经说了如何打开和关闭数据库,这次要说得是如何执行SQL语句,来创建一张表. 要用的的函数: sqlite3_exec(sqlite3* db, const char *sql, sqlite_callback callback, void *data, char **errmsg) 参数: db:已经打开的数据库实例 sql:SQL语句,是一个字符串 callback:是一个回调函数 data:做为回调函数的第一个参数 errmsg:用于带回错误信息 该回调函数有两种返回值类型. 1.返回

C语言中内存的管理

一  Handler作用和概念 包含线程队列和消息队列,实现异步的消息处理机制,跟web开发的ajax有异曲同工之妙. 1.运行在某个线程上,共享线程的消息队列: 2.接收消息.调度消息,派发消息和处理消息: 3.实现消息的异步处理: Handler能够让你发送和处理消息,以及Runnable对象:每个Handler对象对应一个Thread和Thread的消息队列.当你创建一个Handler时,它就和Thread的消息队列绑定在一起,然后就可以传递消息和runnable对象到消息队列中,执行消息

可以将一些配置信息已json格式存在数据库中读取的时候序列化。

public partial class json序列化 : System.Web.UI.Page    {        protected void Page_Load(object sender, EventArgs e)        {            StringBuilder builder = new StringBuilder(); builder.Append("{");            builder.Append("    \"C

C语言中的函数、数组与指针

1.函数:当程序很小的时候,我们可以使用一个main函数就能搞定,但当程序变大的时候,就超出了人的大脑承受范围,逻辑不清了,这时候就需要把一个大程序分成许多小的模块来组织,于是就出现了函数概念:  函数是C语言代码的基本组成部分,它是一个小的模块,整个程序由很多个功能独立的模块(函数)组成.这就是程序设计的基本分化方法: (1) 写一个函数的关键: 函数定义:函数的定义是这个函数的实现,函数定义中包含了函数体,函数体中的代码段决定了这个函数的功能: 函数声明:函数声明也称函数原型声明,函数的原型