你的这个json是怎么判断json为空解决的

PHP处理Json字符串解码返回NULL的解决方法
  本文实例讲述了PHP处理Json字符串解码返回NULL的解决方法。分享给大家供大家参考之用。具体方法如下:
  一般来说,php对json字符串解码使用json_decode()函数,第一个参数传字符串,第二个参数若为true,返回array;若为false,返回object。如果返回NULL,说明报错,输出json_last_error(),得到的整数值对应错误提示。如下图所示:
  json_last_error()比较常见的是整数4, 是json字符串在json_decode之前已不完整,所以语法错误。
  那么一定是客户端提交的个别字符影响了json的格式,可以使用JS进行过滤,可以解决一般问题,主要过滤回车,空格,html标签。
  实现如下:
* 过滤函数
function htmlEncode(str) {
str = str.replace(/\s+/ig, '');
str = str.replace(/&/g, '');
str = str.replace(/&/g, '');
str = str.replace(/&/g, '');
str = str.replace(/(?:t| |v|r)*n/g, '&br /&');
str = str.replace(/t/g, '
str = str.replace(/x22/g, '&');
str = str.replace(/x27/g, ''');
str = str.replace(/"/g, "");
  以上情况针对的是,你必须提交json字符串数据到服务端处理,只能在客户端进行过滤。
  其它的json_decode($str)返回NULL的一些原因:
  1.$str只能UTF-8编码
  2.元素最后不能有逗号(与php的array不同)
  3.元素不能使用单引号
  4.元素值中间不能有空格和\n,必须替换
  如果大家遇到了上述情况,可以按照以上方法处理一下。希望本文所述对大家的PHP设计有所帮助。
您可能感兴趣的文章:PHP针对常规模板引擎中与CSS/JSON冲突的解决方法PHP JSON出错:Cannot use object of type stdClass as array解决方法php中json_encode处理gbk与gb2312中文乱码问题的解决方法php5.2以下版本无json_decode函数的解决方法php5.2 Json不能正确处理中文、GB编码的解决方法探讨PHP JSON中文乱码的解决方法详解php处理json时中文问题的解决方法PHP中使用json数据格式定义字面量对象的方法php判断是否为json格式的方法
发布此文章仅为传递网友分享,不代表无所不有观点,若侵权请联系我们删除,无所不有将不对此承担责任。转载连接:/shumakeji/chengxujiqiao/wangluobiancheng/22380.html且在文章页面明显位置给出原文连接。
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
Copyright (C)
全方位生活·首选品牌JSON(JavaScript Object Notation)javscript对象标记,是一种轻量级的数据交换格式。具体的详细基础知识可以参考JSON官网。
不说太多废话,直接说说我对JSON的理解吧。
一、JSON的一些基础知识。
JSON中对象通过“{}”来标识,一个“{}”代表一个对象,如{“AreaId”:},对象的值是键值对的形式(key:value)。
“[]”,标识数组,数组内部各个数据之间通过“,”分割,如[“AreaId”:,”AreaId”:]。
很多情况下是对象数组,那就是这样:
[{“AreaId”:},{“AreaId”:}]
其实数组也是一个对象,上面的格式也可以写成这样:
{“Area”:[{“AreaId”:},{“AreaId”:}]}
这表示一个Area对象,他有两个子数据,每个子数据也是一个对象,每个子对象都是AreaId。
JSON中字符串和字符的定义格式和一般的类C语言定义是类似的,双引号定义字符串,单引号定义字符。
JSON的键(Key)用双引号括起来,比如上面的“Area“和”AreaId“,都是用双引号括起来的,在一些语言中构造JSON字符串的时候,可以使用转义字符转义双引号。
二、javascript操作JSON字符
1、先要区分JSON字符串和JSON对象
JSON字符串:
Var strJSON = “{\“Area\”:[{\“AreaId\”:\&#\”},{\“AreaId\”:\&#\”}]}”,
其实也可以写成这样:
Var strJSON = ‘{“Area”:[{“AreaId”:},{“AreaId”:}]}’,
这表示一个JSON字符串,由于在Js中单引号和双引号都可以表示一个字符串,所以上面第一个使用双引号和第二个使用单引号的都表示一个JSON字符串。
下面看看JSON对象
Var JSON = {“Area”:[{“AreaId”:},{“AreaId”:}]},
看到了吧,JSON对象最外面是没有单引号或者双引号的,这就表示一个JSON对象。
2、JSON字符串向JSON对象转换
直接只用JS的eval()方法。
如上面的strJSON字符串可以这样转换为JSON对象
Var JSON = eval(”(”+strJSON+”)”),
这样就转换为JSON对象了。
据说使用js的eval()方法有安全上的问题,所以好多人推荐使用JSON官网的json.js包进行转换,但是我去JSON官网下载这个包的时候,发现只有一句话那就是alert(’error’)。不知什么原因,哪位有知道的希望告知一下。
由于使用的JQuery,而且听说Jquery和json.js有冲突,于是参考这篇文章,下载了处理json的jquery插件。
那个插件挺好用的,比如以上的把json字符串转换为JSON对象:
Var JSON = $.parseJSON(strJSON);
这样就可以使用JSON对象了。
其实在Jquery1.4.1之后JQuery也已经添加了对JSON处理的方法,方法名也是parseJSON(str),具体使用也是和上面一样,如果你使用的是1.4.1之后的版本那就不用上面的那个插件了,直接用那个方法就可以了。
如果要是使用Jquery的ajax方法,也可以直接使用getJSON方法,就可以直接获得JSON对象,无需转换。
3、处理JSON数据
获得JSON对象后,就应该处理JSON对象了,比如通过前面的那个strJSON字符串获得JSON对象之后,可以这样获得JSON对象的值
Var firstAreaId = JSON.Area[0].AreaId.
JSON是刚才生成的JSON对象,Area[0]表示JSON对象的第一个Area对象(因为Area对象有两个子对象),AreaId就是要获得子对象的数据。
好了,就写这些吧,如果有不对的地方,请大家指正。
阅读(...) 评论()让天下没有难学的技术
处理JSON的Java API :JSON的简介
处理JSON的Java API :JSON的简介
作者:Jitendra Kotamraju
译者:撒木
处理JSON的各种解析、生成、处理、转换和查询的JAVA API
(JavaScript Object Notation)是一种轻量级的、基于文本的、完全独立于语言的数据交换格式。它非常方便人们和机器的阅读和书写。JSON 有两种结构类型的表现方式:对象和数组。对象是名/值对的无序集合。数组是值(value)的有序集合。值的类型可以是字符串(在双引号中)、数字(整数或浮点数)、逻辑值(true或false)、数组(在方括号中)、对象(在花括号中)、null。
以JSON表示的一个对象去描述一个人。这个人的姓和名都是字符串类型,一个数值表示了年龄,一个对象表示了这个人的地址,还有一个数组对象表示了电话号码。
"firstName": "John",
"lastName": "Smith",
"age": 25,
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": 10021
"phoneNumbers": [
"type": "home",
"number": "212 555-1234"
"type": "fax",
"number": "646 555-4567"
列表 1. JSON表示对象的一个例子
JSON通常被用在Ajax应用、配置、数据库和RESTful web services。几乎所有流行的网站都提供了JSON的数据交换方式在他们的RESTful web services上。
处理JSON的Java API ()提供了各种便捷的API,其中包括解析、生成、转换和使用对象模 型或流来查询JSON。
对象模型的API在内存中产生一个随机存取的树状结构来代表了JSON数据。这个树可以被操作和查询。这种编程模型可以很灵活的处理需要随机存取完整内容的树。但是,对象模型通常都没有流模型效率高,而且需要的存储空间也比流模型多
流API提供了一种以流来解析和生成JSON的方法。它把解析生成JSON的控制权交给了程序猿。流API提供了一种基于事件的解析器并且允许开发者询问下一个事件,而不是再一个回调函数中负责事件的处理。它给予了开发者更多的处理JSON的过程控制。应用程序代码可以处理或抛弃解析器事件,也可以询问下一个事件(pull the event)。流模型适合于部分不需要的数据的随机存取的局部处理。同样的,流API提供了一种通过写一次事件生成结构良好的JSON流。
对象模型API
对象模型API和文件对象模型(DOM)API在xml中很相似。这是一个高级的API,它为JSON对象和数组结构提供了不可变的对象模型。这些JSON结构通过使用 和被表示为对象模型。表格1中展示了对象模型API的主要的类和接口。
JsonObject提供了一个Map视图去存取含有名/值对的无序集合。同样的,JsonArray提供了一个List去存取含有值的有序序列。
表格 1.对象模型API中主要的类和接口
包含产生JSON readers,writers,builders,和他们的工厂对象的静态方法
JsonGenerator
一次一个值的将JSON数据写入一个流中。
JsonReader
从流中读取JSON数据,并且创建一个对象模型在内存中
JsonObjectBuilder
JsonArrayBuilder
在内存中通过向源码中加入一个值,创建一个对象模型或者数组模型
JsonWriter
从内存中拿出一个对象模型写入流中
JsonObject
JsonString
JsonNumber
表示JSON数据中的数据类型.
JsonObject,JsonArray,JsonString 和JsonNumber 是JsonValue的子类型。他们是被定义在API中的常量,有null,true,false的JSON值。
对象模型API使用建造者设计模式,从头创建这些对象模型。应用程序代码可以使用接口JsonObjectBuilder 来创建模型来代表JSON对象。由此产生的模型是JsonObject。应用程序代码可以使用接口JsonArrayBuilder来创建模型来代表JSON数组。由此产生的模型JsonArray。
这些对象模型也可以从一个输入源(例如InputStream或Reader)使用接口JsonReader来创建。同样的,可以写出到一个输出源(例如OutputStream或Writer)使用类JsonWriter。
举个例子,让我们使用对象模型API写个搜索Facebook的公开岗位的code。Facebook的API给我们了搜索结果在列表2中。
"data" : [
{ "from" : { "name" : "xxx", ... }, "message" : "yyy", ... },
{ "from" : { "name" : "ppp", ... }, "message" : "qqq", ... },
列表 2. 搜索Facebook公开岗位的JSON示例
我们可以使用对象模型API取得关于JAVA的名字和他们的岗位。
在列表3中,
第3行创建了JsonR
第5行创建了返回结果的JsonO
第7行循环每一个结果;
第8-11行取得了公布人的姓名和职位,并且打印它们
注意:JsonReader和其他API上的对象可以用于带有资源的try语法中(这也叫做自动资源管理[ARM]).
1 URL url = new URL("/search?q=java&type=post");
2 try (InputStream is = url.openStream();
JsonReader rdr = Json.createReader(is)) {
JsonObject obj = rdr.readObject();
JsonArray results = obj.getJsonArray("data");
for (JsonObject result : results.getValuesAs(JsonObject.class)) {
System.out.print(result.getJsonObject("from").getString("name"));
System.out.print(": ");
System.out.println(result.getString("message", ""));
System.out.println("-----------");
列表 3. 使用对象模型API处理Facebook的岗位。
流API与XML的流API(StAX)类似,它是由接口JsonParser和JsonGenerator组成。JsonParser 包含使用流模型解析JSON数据的方法JsonGenerator包含输出JSON数据到一个输出源的方法。
表格2展示了流API中主要的类和接口
表格 2. 流API中主要的类
包含创建JSON解析器,生成器,和工厂对象的静态方法。
JsonParser
表示一个基于事件的解析器,可以从流中读取JSON数据。
JsonGenerator
每次一个值将JSON数据写出到流中
JsonParser提供了先锋,使用pull 解析对象模型,访问只读的JSON数据。在这个模型中,应用程序代码在解析器接口中,控制线程和方法调用,来使解析器向前移动或者从当前解析器的状态获得JSON数据。
JsonGenerator提供了将JSON数据写入流的方法。生成器可以在JSON对象中写入名/值对,在JSON数组中写入值。
流API是一个低级的API,它被设计用来更效率的处理大量的JSON数据。其他的JSON框架(例如JSON binding) 通过使用API可以继承(implement)。
让我们使用流API来做一下刚才使用对象模型API做过的事情。搜索Facebook的关于JAVA的岗位。
在列表4中,
第1-3行创建了一个流的解析器,
第4-5行取得了下一个事件
第6行寻找KEY_NAME这个事件,
第8到11行读取名字并打印它们,
第14-16行读取职位并输出他们。
当使用对象模型API比较相同的工作,流API提供了一种有效的方式存取名字和职位。
1 URL url = new URL("/search?q=java&type=post");
2 try (InputStream is = url.openStream();
JsonParser parser = Json.createParser(is)) {
while (parser.hasNext()) {
Event e = parser.next();
if (e == Event.KEY_NAME) {
switch (parser.getString()) {
case "name":
parser.next();
System.out.print(parser.getString());
System.out.print(": ");
case "message":
parser.next();
System.out.println(parser.getString());
System.out.println("---------");
列表 4. 使用流API处理Facebook的岗位信息
处理JSON的Java API提供了如下功能:
将输入流解析为不可变的对象或事件流
将事件流或不可变对象写入输出流中
编程操作不可变对象
使用builders编程构建不可变对象
构建数据绑定,转换,查询或其他的操作API基础。JAX-RS 2.0 提供了原始整合为处理JSON的JAVA API。
Jitendra Kotamraju,Oracle技术人员的主要成员,是JSON处理规范领导和GlassFish之后的一个关键工程师。在领导JSON处理计划之前,他负责JAX-WS 2.2 的规范和实现
加入 , 和 !
原创文章,转载请注明: 转载自
本文链接地址:
Latest posts by 撒木 ()
- 2014 年 8 月 23 日
Related posts:
(2 votes, average: 3.50 out of 5)
Loading...ASIFromDataRequest请求得到的json乱码如何解决?
[问题点数:40分,结帖人u]
ASIFromDataRequest请求得到的json乱码如何解决?
[问题点数:40分,结帖人u]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。

我要回帖

更多关于 json怎么用 的文章

 

随机推荐