繁体   English   中英

查找JSON中的所有数值并将其替换为引号

[英]Find all numeric values in JSON and replace them enclosed in quotes

[{
  "SomeValue1": 16237351025487570926,
  "SomeValue2": "value2",
  "SomeValue3": "value3"
 }, {
  "SomeValue1": 16237351025487570926,
  "SomeValue2": "value2",
  "SomeValue3": "value3"
}]

我需要搜索并将SomeValue1替换为相同的值,但用引号引起来(如下所示)。

[{
  "SomeValue1": "16237351025487570926",
  "SomeValue2": "value2",
  "SomeValue3": "value3"
 }, {
  "SomeValue1": "16237351025487570926",
  "SomeValue2": "value2",
  "SomeValue3": "value3"
}]

我需要有php正则表达式(在这种情况下,JSON_BIGINT_AS_STRING会有所不同)。

谢谢 !

JSON_BIGINT_AS_STRING实际上不是其他东西:

$json = '[{
  "SomeValue1": 16237351025487570926
 }, {
  "SomeValue1": 16237351025487570926
}]';

var_dump(json_decode($json));
var_dump(json_decode($json, false, 512, JSON_BIGINT_AS_STRING));

输出:

array(2) {
  [0]=> object(stdClass)#1 (1) {
    ["SomeValue1"] => float(1.6237351025488E+19)
  }
  [1]=> object(stdClass)#2 (1) {
    ["SomeValue1"] => float(1.6237351025488E+19)
  }
}

array(2) {
  [0]=> object(stdClass)#2 (1) {
    ["SomeValue1"] => string(20) "16237351025487570926"
  }
  [1]=> object(stdClass)#1 (1) {
    ["SomeValue1"] => string(20) "16237351025487570926"
  }
}

因此,基本上,您可以执行以下操作:

echo json_encode(json_decode($json, false, 512, JSON_BIGINT_AS_STRING));

如果要转换每个整数,只需在数组上循环,这仅适用于实际上是浮点数的足够大的整数:

foreach($arr = json_decode($json, true, 512, JSON_BIGINT_AS_STRING) as $key => $value){
  foreach($value as $k => $v){
    if(gettype($v) == 'integer'){
      $arr[$key][$k] = (string) $v;
    }
  }
}

echo json_encode($arr);

您可能会使用这样的东西

\s(\d+), 

然后替换为

"$1"

说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM