php json null值中有null的如何处理k

&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!关于json_decode乱码及NULL的解决方法
写接口的同学应该会经常遇到数据格式的转换,这时候必不可少的两个函数就是json_encode()和json_decode()。
这两个函数使用的时候有很多的主要事项,在这里我来说一下json_decode()。
json_decode():&对JSON
格式的字符串进行解码,接受一个JSON
格式的字符串并且把它转换为 PHP&。
(1)将数据转换成数组之后,打印会显示NUll:
原因之一json_decode只支持utf-8.
iconv('gbk','utf-8',
$result_string);用iconv函数将写入数据的gbk编码格式转换为要输出的utf-8编码格式,若原本的数据是utf-8格式,则不用此步骤,否则还会出现乱码
原因之二:json字符串必须以双引号包含
str_replace("'", '"',&$result_string);//将json数据中的单引替换成双引
原因之三:不能有多余的逗号
如:[1,2,]
用正则替换掉,preg_replace('/,\s*([\]}])/m',
'$1',&$result_string);
(2)将数据转换成数组或者在转换成json格式数据之后,会显示乱码:
这时候要用到urlencode()和urldecode()
以下是我的代码,经试验有效
if(file_exists($result['save_path'])){
$contents=file_get_contents($result['save_path']);//将一个文件的内容写入,文件是utf-8格式,里面是json格式的数据
& & //$getcontent =
iconv("gbk", "utf-8//ignore",$contents);//若文件原本是utf-8格式,无需转换
$getcontent=str_replace("'", '"',$contents);//将单引替换成双引
preg_replace('/,\s*([\]}])/m', '$1', $getcontent);//去掉多余的逗号
$new_array=array();
$new_array=json_decode($getcontent,true);
& & $res=array();
& & foreach ($new_array as
$key=&$val){
foreach ($new_array[$key]['items'] as $k=&$v){
& if($k&$row){
&$res[$k]['position']=$v['position'];
&$res[$k]['distance']=$v['distance'];
&$res[$k]['title']=urlencode($v['title']);
&$res[$k['vicinity']=urlencode($v['vicinity']);
& if($res){
& $new_res['items']=$
& $new_res['items']="";
urldecode(json_encode($new_res));
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。gson null值不进行转换问题 - 开源中国社区
当前访客身份:游客 [
当前位置:
Map m=HashMap(); m.put("a",null); 输出:new Gson().toJson(m); 预期结果:{a:null} 实际结果:{} 有人遇到过这个问题吗?
使用&GsonBuilder gsonbuilder = new GsonBuilder().serializeNulls();
共有4个答案
<span class="a_vote_num" id="a_vote_num_
我知道答案哦!不要直接new gson(), 用GsonBuilder, 有个设置是输出null值的。
--- 共有 1 条评论 ---
这个是正解
(2年前)&nbsp&
<span class="a_vote_num" id="a_vote_num_
我看了下Gson源码,发现是构造函数的一个开关参数导致的:
public Gson() {
this(Excluder.DEFAULT, FieldNamingPolicy.IDENTITY,
Collections.&Type, InstanceCreator&?&&emptyMap(), false, false, DEFAULT_JSON_NON_EXECUTABLE,
true, false, false, LongSerializationPolicy.DEFAULT,
Collections.&TypeAdapterFactory&emptyList());
这里第四个参数的意义是设置 serializeNulls属性值。默认是false。Gson不提供这个属性的setter方法,并且上面调用的多参构造函数是package访问权限。
所以没办法通过构造函数或者setter打开这个开关。但有2种方案可以间接实现:
把Gson源码下载下来然后修改第四个参数为true,然后重新打包也是OK的(我亲自测试过这种方法)
绕过toJson(Object)方法,改用:
Gson gson = new Gson();
StringWriter writer = new StringWriter();
JsonWriter jsonWriter = newJsonWriter(Streams.writerForAppendable(writer));
jsonWriter.setSerializeNulls(true);
// 这一行是关键
gson.toJson(src, typeOfSrc, jsonWriter);;
System.out.println(writer.toString());
另外输出应该是{"a": null}
<span class="a_vote_num" id="a_vote_num_
没有复杂到要改源码的地步,可参见我的代码:
--- 共有 3 条评论 ---
卡,这都能碰到
(1年前)&nbsp&
: Gson太太强大,只要结构合理,基本一行代码搞定,不需要自己写中间辅助解析过程。
(2年前)&nbsp&
确实可以调用GsonBuilder设置,没咋用过昨晚临时看的Gson源码:
public GsonBuilder serializeNulls() {
this.serializeNulls =
(2年前)&nbsp&
<span class="a_vote_num" id="a_vote_num_
昨天刚讨论这个问题
更多开发者职位上
有什么技术问题吗?
diqye的其它问题
类似的话题

我要回帖

更多关于 php json null 的文章

 

随机推荐