2016-11-23 47 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

相关问题