2016-11-23 29 views
0
[{ 
    "SomeValue1": 16237351025487570926, 
    "SomeValue2": "value2", 
    "SomeValue3": "value3" 
}, { 
    "SomeValue1": 16237351025487570926, 
    "SomeValue2": "value2", 
    "SomeValue3": "value3" 
}] 

我需要使用相同的值搜索並替換SomeValue1,但用引號括起來(如下所示)。在JSON中查找所有數值並將它們替換爲引號

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

我需要有PHP的正則表達式(JSON_BIGINT_AS_STRING是somethink其他在這種情況下)。

謝謝!

回答

1

你可能會使用類似這樣

\s(\d+), 

,然後用

"$1" 

Explanation

+0

如果json包含數字索引,應該很有趣。 – Xorifelse

1

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)); 

這隻適用於大足夠的整數,它實際上是一個浮點數,如果你w螞蟻每一個整數只是循環轉換陣列上:

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); 
+0

其實有取代。問題是php json extension modul,因爲我猜json_version 1.3.6中有一個bug。而JSON_BIGINT_AS_STRING被忽略。 – dexter

相關問題