Dame un ejemplo.

JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度, 那么,JSON到底是什么? Sobre JSON y JSONP.

Métodos de JavaScript para operar con JSON.

var str1 = '{ "name": "cxh", "sex": "man" }';
var data=eval("("+str1+")");//转换为json对象//data =(new
alert (data.name);//会显示出cxh

不过eval解析json有安全隐患!
现在大多数浏览器(IE8及以上,Chrome和Firefox差不多全部)自带原生JSON对象,提供JSON.parse()方法解析JSON,提供JSON.stringify()方法生成JSON,请使用这两个方法!
如果担心parse()对对象抛异常,可以加一个封装函数:

JSON.pParse = function( tar ) {
    if( typeof( tar ) === 'string' ) {
        return JSON.parse( tar );
    } else {
        return tar;
    }
};

Agradezco a oschina por el método de modificación proporcionado por 我土鳖.

métodos de operación JSON en json.js

为了方便地处理JSON数据,JSON提供了json.js包,下载地址: http://lib.sinaapp.com/js/json2/json2.js

En el proceso de transmisión de datos, JSON se transmite en forma de texto, es decir, como una cadena de caracteres, mientras que JS opera con objetos JSON. Por lo tanto, la conversión mutua entre objetos JSON y cadenas JSON es clave. Por ejemplo:

Cadena JSON:

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

Objeto JSON:

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

1. Conversión de una cadena JSON a un objeto JSON.

Para utilizar el str1 de arriba, es necesario convertir el siguiente contenido en un objeto JSON:

var obj = eval('(' + str + ')');//由JSON字符串转换为JSON对象

o bien:

var obj = str.parseJSON(); //由JSON字符串转换为JSON对象

o bien:

var obj = JSON.parse(str); //由JSON字符串转换为JSON对象

Entonces, se puede leer así:

Alert(obj.name);
Alert(obj.sex);

Atención especial: si el obj ya es un objeto JSON, entonces al utilizar la función eval() para convertirlo (incluso si se convierte varias veces) seguirá siendo un objeto JSON, pero al procesarlo con la función parseJSON() habrá dudas (se lanzará una excepción de sintaxis).

Se puede utilizar toJSONString() o la función global JSON.stringify() para convertir un objeto JSON en una cadena JSON.

Por ejemplo:

var last=obj.toJSONString(); //将JSON对象转化为JSON字符

o bien:

var last=JSON.stringify(obj); //将JSON对象转化为JSON字符
alert(last);

Atención:

Entre las múltiples características mencionadas anteriormente, además de la función eval() que es nativa de JavaScript, las otras características provienen del paquete json.js. La nueva versión de JSON modificó la API, inyectando las dos características JSON.stringify() y JSON.parse() en los objetos incorporados de JavaScript, donde la primera se convirtió en Object.toJSONString() y la segunda en String.parseJSON(). Si se recibe un aviso de que no se pueden encontrar las características toJSONString() y parseJSON(), significa que la versión de su paquete json es demasiado baja.

Método para obtener JSON con jQuery.

Gramática:

jQuery.getJSON(url,data,success(data,status,xhr))

Parámetros:

parámetro Descripción
url Obligatorio. Especifica la URL a la que se enviará la solicitud.
data Opcional. Especifica los datos que se envían al servidor junto con la solicitud.
success(data,status,xhr) 可选。规定当请求成功时运行的函数。
额外的参数:
  • respuesta - contiene los datos de resultado de la solicitud
  • estado - incluye el estado de la solicitud
  • xhr - incluye el objeto XMLHttpRequest

Caso de uso:

$.getJSON("test.js", function(json){ alert("JSON Data: " + json.users[3].name); });

Métodos para operar con JSON en Java.

这个需要json-lib.jar包支持 该jar下载地址: Haz clic para descargar.

//JSON对象 JSONObject的使用
String str1 = "{ 'name': 'cxh', 'sex': '1' }";
JSONObject obj = JSONObject.fromObject(str1);
String name = obj.getString("name"); //直接返回字符串型 cxh
Object nameo = obj.get("name"); //直接返回对象型的cxh
int age = obj.getInt("sex"); //直接返回int型的sex

//JSON数组对象 JSONArray的运用
String jsonArrStr = "[{ 'name': 'cxh', 'sex': '1','website':'http://www.bejson.com' },{ 'name': '三少', 'sex': '1','website':'http://www.ij2ee.com' }]";
JSONArray array = JSONArray.fromObject(jsonArrStr);
int size = array.size(); //获取JSON数组大小
JSONObject jo = array.getJSONObject(0);//取第一个JSON对象
for(int i=0;i<size;i++){
    JSONObject jo1 = array.getJSONObject(i);
    System.out.println(jo1.getString("website")); //循环返回网址
}

//序列化Bean对象为JSON对象
User user = new User();
user.setName("cxh");
user.setSex(1);
user.setWebsite("http://www.bejson.com");
JSONObject jo2 =  JSONObject.fromObject(user);
System.out.println(jo2.toString()); //则会输出 { 'name': 'cxh', 'sex': '1','website':'http://www.bejson.com' }

Métodos para operar con JSON en PHP.

Uno, json_encode()

Esta función se utiliza principalmente para convertir arrays y objetos en formato JSON. Primero, veamos un ejemplo de conversión de un array:

$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
echo json_encode($arr);

El resultado es:

{"a":1,"b":2,"c":3,"d":4,"e":5}

Veamos otro ejemplo de conversión de objeto:

$obj->body = 'another post';
$obj->id = 21;
$obj->approved = true;
$obj->favorite_count = 1;
$obj->status = NULL;
echo json_encode($obj);

El resultado es:

{
"body":"another post",
"id":21,
"approved":true,
"favorite_count":1,
"status":null
}

Debido a que JSON solo acepta caracteres codificados en UTF-8, los parámetros de json_encode() deben estar en codificación UTF-8, de lo contrario se obtendrán caracteres vacíos o null. Esto es especialmente importante cuando el chino utiliza la codificación GB2312 o los idiomas extranjeros utilizan la codificación ISO-8859-1.

Dos, arreglos indexados y arreglos asociativos.

PHP admite dos tipos de arreglos: uno es el arreglo indexado (indexed array), que solo guarda "valores" (value), y el otro es el arreglo asociativo (associative array), que guarda "pares de nombre y valor" (name/value). Dado que JavaScript no admite arreglos asociativos, json_encode() solo convierte arreglos indexados (indexed array) a formato de arreglo, mientras que convierte arreglos asociativos (associative array) a formato de objeto. Por ejemplo, ahora hay un arreglo indexado.

$arr = Array('one', 'two', 'three');
echo json_encode($arr);

El resultado es:

["one","two","three"]

Si se convierte en un arreglo asociativo:

$arr = Array('1'=>'one', '2'=>'two', '3'=>'three');
echo json_encode($arr);

El resultado cambió:

{"1":"one","2":"two","3":"three"}

注意,数据格式从"[]"(数组)变成了"{}"(对象)。
如果你需要将"索引数组"强制转化成"对象",可以这样写:

json_encode( (object)$arr );

O también:

json_encode ( $arr, JSON_FORCE_OBJECT );

Tres, conversión de clase.

A continuación se muestra una clase PHP:

class Foo {
    const ERROR_CODE = '404';
    public $public_ex = 'this is public';
    private $private_ex = 'this is private!';
    protected $protected_ex = 'this should be protected';
    public function getErrorCode() {
        return self::ERROR_CODE;
    }
}

Ahora, realice la conversión a JSON de una instancia de esta clase:

$foo = new Foo;
$foo_json = json_encode($foo);
echo $foo_json;

El resultado es:

{"public_ex":"this is public"}

Se puede ver que, además de las variables públicas, se han perdido otras cosas (constantes, variables privadas, métodos, etc.).

Cuatro, json_decode()

Esta función se utiliza para convertir texto JSON en la estructura de datos PHP correspondiente. A continuación, se muestra un ejemplo:

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

Normalmente, json_decode() siempre devuelve un objeto PHP en lugar de un array. Por ejemplo:

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));

El resultado es generar un objeto PHP:

object(stdClass)#1 (5) {
["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}

Si deseas forzar la generación de un array asociativo en PHP, json_decode() necesita tener un parámetro adicional establecido en true.

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json,true));

El resultado generó un arreglo asociativo:

array(5) {
["a"] => int(1)
     ["b"] => int(2)
     ["c"] => int(3)
     ["d"] => int(4)
     ["e"] => int(5)
}

Errores comunes de json_decode()

$bad_json = "{ 'bar': 'baz' }";
$bad_json = '{ bar: "baz" }';
$bad_json = '{ "bar": "baz", }';

对这三个字符串执行json_decode()都将返回null,并且报错。
第一个的错误是,json的分隔符(delimiter)只允许使用双引号,不能使用单引号。第二个的错误是,json名值对的"名"(冒号左边的部分),任何情况下都必须使用双引号。第三个的错误是,最后一个值之后不能添加逗号(trailing comma)。
另外,json只能用来表示对象(object)和数组(array),如果对一个字符串或数值使用json_decode(),将会返回null。

var_dump(json_decode("Hello World")); //null

Métodos para manipular JSON en Python.

import json

str1 = '{ "name": "cxh", "sex": "1" }'
# 或者
# str1 = """{ "name": "cxh", "sex": "1" }"""
# 或者
# str1 = "{ \"name\": \"cxh\", \"sex\": \"1\" }"

obj = json.loads(str1)
print(obj["name"])
print(obj["sex"])

# 由于出现中文,记得文件头加入 # coding:utf8
json_arr_str = """[{ "name": "cxh", "sex": "1","website":"http://www.bejson.com" },{ "name": "我的", "sex": "1","website":"http://www.bejson.com" }]"""

arr = json.loads(json_arr_str)

for o in arr:
    print(o["name"])
    print(o["sex"])
    print(o["website"])

Gracias al código proporcionado por Zhang Donggui.

Métodos para operar con JSON en C#

需要的dll:Newtonsoft.Json.dll, Descarga desde el sitio oficial de DLL.

//读取简单的json
string json="{\"username\":\"张三\"}";
string username = string.Empty;
JObject jObj=JObject.Parse(json); //进行格式化
username = jObj["username"].ToString();
Console.WriteLine(username);


//读取嵌套对象的json
json = "{\"username\":\"张三\",data:{\"address\":\"福建厦门\"}}";
jObj = JObject.Parse(json);
string address = string.Empty;
address = jObj["data"]["address"].ToString();
Console.WriteLine(address);

//读取数组,操作方式与数组类似
json = "{\"username\":\"张三\",data:[{\"address\":\"福建厦门\"},{\"address\":\"福建福州\"}]}";
jObj = JObject.Parse(json);
 address = string.Empty;
address = jObj["data"][0]["address"].ToString()+","+ jObj["data"][1]["address"].ToString();
Console.WriteLine(address);

Console.ReadLine();

Gracias al código proporcionado por Huang Minghui.

Métodos para manipular JSON en Objective-C.

需要的dll:Newtonsoft.Json.dll, Descarga desde el sitio oficial de DLL.

//JSON字符串转字典:
NSString *str1 = @"{\"name\":\"cxh\",\"sex\":\"1\"}";
NSData *jsonData1 = [str1 dataUsingEncoding:NSUTF8StringEncoding];
NSError *error1;
NSDictionary *jsonDic = [NSJSONSerialization JSONObjectWithData:jsonData1 options:NSJSONReadingMutableContainers error:&error1];
/*
 NSJSONReadingMutableContainers 创建结果为可变数组/字典
 NSJSONReadingMutableLeaves 创建结果中字符串是可变字符串
 NSJSONReadingAllowFragments 允许json最外层不是数组或字典
 */
if (!error1) {
	NSLog(@"jsonDic is:%@",jsonDic);
}
else{
	NSLog(@"error:%@",error1);
}

//字典转JSON字符串
NSError *error2 = nil;
NSData *jsonData2 = [NSJSONSerialization dataWithJSONObject:jsonDic options:NSJSONWritingPrettyPrinted error:&error2];
if (!error2) {
	NSString *str2 = [[NSString alloc] initWithData:jsonData2 encoding:NSUTF8StringEncoding];
	NSLog(@"json string is:%@",str2);
}
else{
	NSLog(@"error:%@",error2);
}

Otros

Si tiene algo que complementar, envíe el código y las bibliotecas necesarias a mi correo electrónico ij2ee@139.com. Los que sean adoptados pueden incluir un enlace a su sitio web.

Recientemente has utilizado:

Coleccionar Menú QQ