数据类型和Json格式

1.

前几天,我才知道有一种简化的数据交换格式,叫做yaml

我翻了一遍它的文档,看懂的地方不多,但是有一句话令我茅塞顿开。

它说,从结构上看,所有的数据(data)最终都可以分解成三种类型

第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词。

第二种类型是序列(sequence),也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组(array)或列表(List),比如"北京,上海"。

第三种类型是映射(mapping),也就是一个名/值对(Name/value),即数据有一个名称,还有一个与之相对应的值,这又称作散列(hash)或字典(dictionary),比如"首都:北京"。

我恍然大悟,数据构成的最小单位原来如此简单!难怪在编程语言中,只要有了数组(array)和对象(object)就能够储存一切数据了。 Continue reading

在PHP语言中使用JSON

目前,JSON已经成为最流行的数据交换格式之一,各大网站的API几乎都支持它。

我写过一篇《数据类型和JSON格式》,探讨它的设计思想。今天,我想总结一下PHP语言对它的支持,这是开发互联网应用程序(特别是编写API)必须了解的知识。

从5.2版本开始,PHP原生提供json_encode()json_decode()函数,前者用于编码,后者用于解码。

一、json_encode()

该函数主要用来将数组和对象,转换为json格式。先看一个数组转换的例子:

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

echo json_encode($arr);

结果为

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

再看一个对象转换的例子:

  $obj->body = 'another post';

$obj->id = 21;

$obj->approved = true;

$obj->favorite_count = 1;

$obj->status = NULL;

echo json_encode($obj);

结果为

  {
"body":"another post",

"id":21,

"approved":true,

"favorite_count":1,

"status":null
}

由于json只接受utf-8编码的字符,所以json_encode()的参数必须是utf-8编码,否则会得到空字符或者null。当中文使用GB2312编码,或者外文使用ISO-8859-1编码的时候,这一点要特别注意。 Continue reading

json_encode 中文乱码的解决方法

json 是一个很好的数据结构现在已经广泛用在网络数据传输上

php 自身待了两个和json 相关的函数
json_encode 和 json_decode

这两个函数的具体用法 网上有很多相关的文章
本文主要介绍 用json_encode 时 中文无法转换的解决方案

本文假设 文件所用的编码为gb2312;

先写出所需的数组

<?php
$json
= array (
0
=>
array (
'id' => '13'
,
'name' => '乒乓球'
,
),
1
=>
array (
'id' => '17'
,
'name' => '篮球'
,
)
)
?>

如果直接用函数json_encode

<?php
echo json_encode($json
);
?>

结果为: Continue reading

Ajax中XML和JSON格式的优劣比较

刚做完一个小的使用Ajax的项目。整个小项目使用JavaScript做客户端,使用PHP做服务器端、利用xmlHttpRequest组件作为交互工具,利用XML作为数据传输的格式。做完后基本做一个简单总结,简单分析一下使用XML作为传输格式的优劣。

[   XML ]
使用XML作为传输格式的优势:
1. 格式统一, 符合标准
2. 容易与其他系统进行远程交互, 数据共享比较方便

缺点:
1. XML文件格式文件庞大, 格式复杂, 传输占用带宽
2. 服务器端和客户端都需要花费大量代码来解析XML, 不论服务器端和客户端代码变的异常复杂和不容易维护
3. 客户端不同浏览器之间解析XML的方式不一致, 需要重复编写很多代码
4. 服务器端和客户端解析XML花费资源和时间
[ JSON ]
那么除了XML格式, 还有没有其他格式, 有一种叫做JSON (JavaScript Object Notation) 的轻量级数据交换格式能够替代XML的工作. Continue reading

JS操作JSON总结

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不需要任何特殊的 API 或工具包。
本文主要是对JS操作JSON的方法做下总结。

在JSON中,有两种结构:对象数组
1. 一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。 名称用引号括起来;值如果是字符串则必须用括号,数值型则不需要。例如:
var o={"xlid":"cxh","xldigitid":123456,"topscore":2000,"topplaytime":"2009-08-20"};
2. 数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。
例如: Continue reading

js遍历json数组

<HTML><HEAD><TITLE> New Document </TITLE>

<script language="javascript">

function e(){
var json=[{"kl_id":"2","kl_title":"Test date","kl_content":"Testdate","kl_type":"1","id":"1"},{"kl_id":"2","kl_title":"Test","kl_content":"Test","kl_type":"1","id":"2"}]

var str = "";

for (var one in json){

for(var key in json[one]){
str += json[one][key] + ",";
}

}

document.form.txtName.value = str;

}

</script>

</HEAD>
<BODY>
<form name="form">
<a href="#" onclick="e();">Click</a>
<br>
<input name="txtName" value="" type="text" size="50">
</form>
</BODY>
</HTML>

centos下安装php-json

centos5下面yum源中没有json,只能通过编译了。

#cd /usr/local/src
1.下载源文件包:
wget http://www.aurore.net/projects/php-json/php-json-ext-1.2.0.tar.bz2

2.解压
tar xvjf php-json-ext-1.2.0.tar.bz2
使用tar命令解压一定要确认已经安装过bzip2,否则会提示 "tar: bzip2: Cannot exec: No such file or directory" 错误.

3.进入目录
cd php-json-ext-1.2.0
4.初始化PHP环境
phpize
Continue reading

Php操作JSON

整理两个现成的函数:json_decode、json_encode
说明:其中json_encode 表示把常用的传统的数据类型如对象、数组、关联数组等转成JSON字符串。其实与JAVA里面的那个工具是一样的。而json_decode刚好相反。
解决需求1.修改数据表的时候动态生成一个JSON片段。供JS调用。
服务器端的代码:
function plan2() {
$link = mysql_connect("localhost","root","123") or die("<font color=red>无法建立起来连接。错误信息如下</font>");
mysql_query("SET NAMES gbk");
mysql_select_db("phpcms",$link) or die("<font color=red>在服务器上面无法找到此请确认已建立此DB ");
$result = mysql_query("select id,uuid,uuidtable from dytable ");
$num_rows = @mysql_num_rows($result); //看一下返回多少行记录
if ($num_rows == 0) {
$b = array();         //这样长度为0 返回的是一个空数组
}else{
while ($row = mysql_fetch_array($result,MYSQL_ASSOC)){
$b[] = $row;
}
}
echo json_encode($b);
mysql_close();
}
plan2();
这样生成的JSON是比较方便的了! Continue reading

json简单应用

json简单应用
$arr = array('name' => '高东臣', 'age' => 23);
$json_str = json_encode($arr);
echo 'var Me = '.$json_str;

保存为4.php
<script type="text/javascript" src="4.php"></script>
<script type="text/javascript">alert(Me.name);</script>

保存为1.htm

这样打击会看到PHP的交互了

其实JSON和XML差不多都是.利用JS来交互的.

jQuery/Ajax/PHP/Json 的一个综合例子

jQuery 是一个优秀的 Javascript 框架,对 js 进行了优秀的包装,提供了许多方便的功能。jQuery 对 ajax 的包装也堪称优秀。

jQuery 可以以 json 文件传输协议来传输数据(类似 xml,而且大有取代 xml 的趋势),而网站后台代码必须与之配合使用。PHP 是用 json_encode 函数来对返回的数组数据进行编码的,但这个函数只有 PHP5.2版本以上才支持。

从网上找到一个 json 的操作类,本人在 PHP4.4.7 版本下测试通过。本人还建了个函数 function my_json_encode($phparr),使代码兼容 PHP5.2 以上版本。

示例代码(包括 json 的类包软件)可以在以下网址下载:http://download.csdn.net/source/810895

以下是全部代码:

<html>
<head>
<title>jQuery Ajax 实例演示</title>
</head>
<script language="javascript" src="../lib/jquery.js"></script>
<script language="javascript">

$(document).ready(function ()
{
$('#send_ajax').click(function (){
var params=$('input').serialize(); //序列化表单的值
$.ajax({
url:'ajax_json.php', //后台处理程序
type:'post',         //数据发送方式
dataType:'json',     //接受数据格式
data:params,         //要传递的数据
success:update_page  //回传函数(这里是函数名)
});
});

//$.post()方式:
$('#test_post').click(function (){
$.post(
'ajax_json.php',
{
username:$('#input1').val(),
age:$('#input2').val(),
sex:$('#input3').val(),
job:$('#input4').val()
},
function (data) //回传函数
{
var myjson='';
eval('myjson=' + data + ';');
$('#result').html("姓名:" + myjson.username + "<br/>工作:" + myjson['job']);
}
);
});

//$.get()方式:
$('#test_get').click(function ()
{
$.get(
'ajax_json.php',
{
username:$("#input1").val(),
age:$("#input2").val(),
sex:$("#input3").val(),
job:$("#input4").val()
},
function(data) //回传函数
{
var myjson='';
eval("myjson=" + data + ";");
$("#result").html(myjson.job);
}
);
});
});

function update_page (json)  //回传函数实体,参数为XMLhttpRequest.responseText
{
var str="姓名:"+json.username+"<br />";
str+="年龄:"+json.age+"<br />";
str+="性别:"+json.sex+"<br />";
str+="工作:"+json.job+"<br />";
str+="追加测试:"+json.append;
$("#result").html(str);
}
</script>
<body>

<div id="result" style="background:orange;border:1px solid red;width:300px;height:200px;"></div>
<form id="formtest" action="" method="post">
<p><span>输入姓名:</span><input type="text" name="username" id="input1" /></p>
<p><span>输入年龄:</span><input type="text" name="age" id="input2" /></p>
<p><span>输入性别:</span><input type="text" name="sex" id="input3" /></p>
<p><span>输入工作:</span><input type="text" name="job" id="input4" /></p>
</form>
<button id="send_ajax">提交</button>
<button id="test_post">POST提交</button>
<button id="test_get">GET提交</button>

</body>
</html>
PHP 文件 ajax_json.php:

<?php
//$arr = $_POST; //若以$.get()方式发送数据,则要改成$_GET.或者干脆:$_REQUEST
$arr = $_REQUEST;
$arr['append'] = '测试字符串';
//print_r($arr);
$myjson = my_json_encode($arr);
echo $myjson;

function my_json_encode($phparr)
{
if(function_exists("json_encode"))
{
return json_encode($phparr);
}
else
{
require_once 'json/json.class.php';
$json = new Services_JSON;
return $json->encode($phparr);
}
}
?>