PHP json_解码将有问题的值转换为字符串而不是浮点?

PHP json_解码将有问题的值转换为字符串而不是浮点?,php,json,parsing,Php,Json,Parsing,我有一个要导入的JSON数据数组。我称之为无问题JSON数据的一个例子是: [{ "records": [{ "timestamp": 1437805800, "Import": 1011546 },{ "timestamp": 1437805800, "Import": 1075864 },{ "timestamp": 1437805800, "Import": 1132356 }] }] 但我遇到的问题是,有时数据可能是这样的

我有一个要导入的JSON数据数组。我称之为无问题JSON数据的一个例子是:

[{
  "records": [{
    "timestamp": 1437805800,
    "Import": 1011546
  },{
    "timestamp": 1437805800,
    "Import": 1075864
  },{
    "timestamp": 1437805800,
    "Import": 1132356
  }]
}]
但我遇到的问题是,有时数据可能是这样的:

[{
  "records": [{
    "timestamp": 1437805800,
    "Import": 1011546e3
  },{
    "timestamp": 1437805800,
    "Import": 1075864e3
  },{
    "timestamp": 1437805800,
    "Import": 1132356e3
  }]
}]
其中101546e3=101546x10^3,这是我遇到的问题,因为json_decode的默认行为会将这些值转换为浮点值,并在其中,将
e3
转换为000,或
e5
转换为00000,因此对于上面的第一个值,我将返回1011546000、1075864000、1132356000。我无法判断此值是否已被修改,因为它可能是有效值


鉴于此JSON数据可能包含字符串
e
,且该字符串应为整数值,我如何从该JSON数据中检索正确的值(在通过JSON\u decode运行之前存在于JSON字符串中)?

您必须将
JSON\u NUMERIC\u CHECK
作为
JSON\u encode()函数中的第二个参数传递

比如说

$numbers = array('+123123', '-123123', '1.2e3', '0.00001');
var_dump(
 $numbers,
 json_encode($numbers, JSON_NUMERIC_CHECK)
);
echo "Strings containing improperly formatted numbers".PHP_EOL;
$strings = array('+a33123456789', 'a123');

请参阅第二个参数各种选项

您必须在
JSON\u encode()函数中将
JSON\u NUMERIC\u CHECK
作为第二个参数传递

比如说

$numbers = array('+123123', '-123123', '1.2e3', '0.00001');
var_dump(
 $numbers,
 json_encode($numbers, JSON_NUMERIC_CHECK)
);
echo "Strings containing improperly formatted numbers".PHP_EOL;
$strings = array('+a33123456789', 'a123');

参考第二个参数“各种选项”

最后一个参数返回1.0e-5。感谢您的输入,因为我不知道这个参数。也就是说,您已经通过显式声明numbers数组中的所有值都是字符串来测试了这一点,但是在我的示例中,这些值不是字符串值,而是整数,因此不使用引号进行封装。我无法控制数据源,因此我正在努力找出如何处理数据,除非它手动解析字符串并想出封装这些值的方法。最后一个参数返回1.0e-5。感谢您的输入,因为我不知道这个参数。也就是说,您已经通过显式声明numbers数组中的所有值都是字符串来测试了这一点,但是在我的示例中,这些值不是字符串值,而是整数,因此不使用引号进行封装。我无法控制源代码,因此我正在努力找出如何处理数据,除非它手动解析字符串并想出一种封装这些值的方法。。。您将在JSON中获得
101546e3
作为数字字段,并希望将其作为字符串导入。因此,您需要的是一个PHP字符串值,看起来像
“101546e3”
。“对吗?”辛巴说得很对。它在JSON中不带引号,JSON_decode将其解析为一个浮点,这会导致一些不必要的行为。@RyanVincent简单地说,我可以用1011546和1055632e3作为示例数字。json_decode,沿着这条线的某个地方将封装值中的“e3”呈现为3个零,这就是我所说的被修改的意思。不是我在做零,而是json_解码在做,所以我无法判断它是否是有效值,如果我通过json_解码运行字符串,只有在我检查原始字符串时才可以。Simba所以本质上,json_解码有可选参数json_NUMERIC_检查哪些强制浮点值?我想在这里强制使用字符串值。好的,那么有一个简单的简短答案:不,你不能。需要澄清的是,您引用的JSON字符串包含一个数值。这是一个数字。它不是一根弦。只有在JSON字符串中用引号括起来时,才能将其视为字符串。除非修改传入的JSON本身,否则无法强制此值为字符串。。。您将在JSON中获得
101546e3
作为数字字段,并希望将其作为字符串导入。因此,您需要的是一个PHP字符串值,看起来像
“101546e3”
。“对吗?”辛巴说得很对。它在JSON中不带引号,JSON_decode将其解析为一个浮点,这会导致一些不必要的行为。@RyanVincent简单地说,我可以用1011546和1055632e3作为示例数字。json_decode,沿着这条线的某个地方将封装值中的“e3”呈现为3个零,这就是我所说的被修改的意思。不是我在做零,而是json_解码在做,所以我无法判断它是否是有效值,如果我通过json_解码运行字符串,只有在我检查原始字符串时才可以。Simba所以本质上,json_解码有可选参数json_NUMERIC_检查哪些强制浮点值?我想在这里强制使用字符串值。好的,那么有一个简单的简短答案:不,你不能。需要澄清的是,您引用的JSON字符串包含一个数值。这是一个数字。它不是一根弦。只有在JSON字符串中用引号括起来时,才能将其视为字符串。除非修改传入的JSON本身,否则不能强制此值为字符串。