簡體   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