这种类型的json怎么解析

reqparam={
    "pub": {
        "platno": "jcrzzl",
        "cmpseq": "20171128000358000001",
        "zoneno": "1302",
        "phybrno": "12032150",
        "orderno": "-9223372036854775808",
        "assurerno": "528",
        "cmpdate": "20171128",
        "cmptime": "000358"
    },
    "req": {
        "custname": "小明",
        "idno": "330681199003000004",
        "relation": "本人",
        "result": "099",
        "loanCrdt": "-",
        "cardCrdt": "-",
        "leftNum": "-",
        "leftAmount": "-",
        "note": "图片下载失败,请检查后再提交!"
    }
}

前面带个reqparam=

阅读 6.1k
11 个回答

直接用eval

目前它还不是json啊 去掉"reqparam="才是json格式的

直接用json_decode($reqparam,true);转化成数组不可以吗?

说明它不合格。
只能把 reqparam= 去掉啦,看着就是固定格式,位于开头,直接去掉再读,完美。

= 进行分割 取后面的串进行解析。

<?php

$str = <<<EOF
reqparam={
    "pub": {
        "platno": "jcrzzl",
        "cmpseq": "20171128000358000001",
        "zoneno": "1302",
        "phybrno": "12032150",
        "orderno": "-9223372036854775808",
        "assurerno": "528",
        "cmpdate": "20171128",
        "cmptime": "000358"
    },
    "req": {
        "custname": "小明",
        "idno": "330681199003000004",
        "relation": "本人",
        "result": "099",
        "loanCrdt": "-",
        "cardCrdt": "-",
        "leftNum": "-",
        "leftAmount": "-",
        "note": "图片下载失败,请检查后再提交!"
    }
}
EOF;

$replaced_str = str_replace('reqparam=', '', $str);
$json = json_decode($replaced_str, true);
print_r($json);

clipboard.png

必须要把reqparam= 清楚才能解析的

我个人用法是,先用 strpos(); 函数获取到第一个 '{',通过 substr(); 函数去除前面部分。再进行解析。由于前阵子获取出现过这种情况,还有就是出现损坏的 json 字符串返回,然后在裁剪前面字符后为预防万一还做了个检测是否 json 是否能被 json_descde(); 函数转换,如果不行就进行递归修理。

let reqparam = {
  "pub": {
      "platno": "jcrzzl",
      "cmpseq": "20171128000358000001",
      "zoneno": "1302",
      "phybrno": "12032150",
      "orderno": "-9223372036854775808",
      "assurerno": "528",
      "cmpdate": "20171128",
      "cmptime": "000358"
  },
  "req": {
        "custname": "小明",
        "idno": "330681199003000004",
        "relation": "本人",
        "result": "099",
        "loanCrdt": "-",
        "cardCrdt": "-",
        "leftNum": "-",
        "leftAmount": "-",
        "note": "图片下载失败,请检查后再提交!"
    }
};
console.log(reqparam.pub.assurerno); //直接取值,结果528
let arr = Object.keys(reqparam).map(function(re){
  return reqparam[re];
});
console.log(arr);

我觉得先str_replace去掉前面的参数和等号,然后json_decode应该是简洁的吧

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题