PHP较新版本无法解码json“;类似“的版本”;字符串(例如:“0.7.4”-“0.7”)
在PHP中执行此代码时,我希望字符串PHP较新版本无法解码json“;类似“的版本”;字符串(例如:“0.7.4”-“0.7”),php,json,Php,Json,在PHP中执行此代码时,我希望字符串“0.7.4”仍为“0.7.4” 几乎每一个PHP版本都是如此,但在我的AWS中使用的是PHP5.6.9,在这个PHP沙盒(5.6.4?)中,我得到了0.7 在我的代码中,$value可以是一个可反序列化的字符串,也可以是一个简单的字符串(“['a','b']”,“{'a':'10'}”,“abc”,“2500”,等等),我希望json能够正确地对其进行解码。但我不知道如何避免这个奇怪的问题 有什么想法吗? 谢谢0.7.4不是有效的JSON。 这是有效的JSO
“0.7.4”
仍为“0.7.4”
几乎每一个PHP版本都是如此,但在我的AWS中使用的是PHP5.6.9,在这个PHP沙盒(5.6.4?)中,我得到了0.7
在我的代码中,$value
可以是一个可反序列化的字符串,也可以是一个简单的字符串(“['a','b']”,“{'a':'10'}”,“abc”,“2500”,等等),我希望json能够正确地对其进行解码。但我不知道如何避免这个奇怪的问题
有什么想法吗?
谢谢0.7.4不是有效的JSON。
这是有效的JSON{“数据”:“0.7.4”}
在这里了解更多关于JSON的信息 JSON到对象:
$json = '{"data": "0.7.4"}';
$obj = json_decode($json);
var_dump($obj);
JSON到数组:
$json = '{"data": "0.7.4"}';
$array = json_decode($json, true);
var_dump($array);
0.7.4不是有效的JSON。
这是有效的JSON{“数据”:“0.7.4”}
在这里了解更多关于JSON的信息 JSON到对象:
$json = '{"data": "0.7.4"}';
$obj = json_decode($json);
var_dump($obj);
JSON到数组:
$json = '{"data": "0.7.4"}';
$array = json_decode($json, true);
var_dump($array);
两件事:
0.7.4
是无效的JSON句号。它在PHP中起作用,但它确实起作用了,这是一个很好的例子。您不应该依赖此行为,因为它是不正确的$value = "0.7.4";
if( !empty($value) )
{
$jsonValue = json_decode($value);
if ( $jsonValue !== NULL ) {
// Pick a value to return
$value = $jsonValue->something;
} else {
// Do nothing, leave $value as is
}
}
var_dump($value);
两件事:
0.7.4
是无效的JSON句号。它在PHP中起作用,但它确实起作用了,这是一个很好的例子。您不应该依赖此行为,因为它是不正确的$value = "0.7.4";
if( !empty($value) )
{
$jsonValue = json_decode($value);
if ( $jsonValue !== NULL ) {
// Pick a value to return
$value = $jsonValue->something;
} else {
// Do nothing, leave $value as is
}
}
var_dump($value);
如上所述,
0.7.4
不是有效的JSON(根据JSON规范),但是PHP的JSON\u decode
也可以解码标量值
PHP实现了原始»RFC4627中指定的JSON超集-它还将编码和解码标量类型和NULL。RFC 4627仅当这些值嵌套在数组或对象中时才支持这些值
发件人:
如果您有$value=''0.7.4'
(7个字符),然后json\u decode()
将其解码为字符串0.7.4
。但是由于您的值是0.7.4
(5个字符,因为它缺少双引号),因此无法解码
您在的示例是无法解码$value
,而只是打印出其原始值(请参阅:)
编辑:出于某种奇怪的原因,at的示例是将
0.7.4
解码为浮点0.7
。这不应该发生。如果使用$value=“0.7”:(请参阅:)。如上所述,0.7.4
不是有效的JSON(根据JSON规范),但PHP的JSON\u decode
也可以解码标量值
PHP实现了原始»RFC4627中指定的JSON超集-它还将编码和解码标量类型和NULL。RFC 4627仅当这些值嵌套在数组或对象中时才支持这些值
发件人:
如果您有$value=''0.7.4'
(7个字符),然后json\u decode()
将其解码为字符串0.7.4
。但是由于您的值是0.7.4
(5个字符,因为它缺少双引号),因此无法解码
您在的示例是无法解码$value
,而只是打印出其原始值(请参阅:)
编辑:出于某种奇怪的原因,at的示例是将0.7.4
解码为浮点0.7
。这不应该发生。如果您使用$value=“0.7”进行声明,则只能获得0.7
:
(请参阅:)。等待0.7.4
是php的有效json编码字符串吗?@deceze:它不是。。。你说得对。它必须是$value=''0.7.4'代码>将在所有旧版本中使用。不是严格的json,但至少被json忽略,没有使用意外条件修改。看起来好像试图将“0.7.4”解码为浮点,忽略第二个点。奇怪的决定。我得说,奇怪的是你没有得到一个错误的结果。在JS中解码后,您会如何使用0.7.4
?您发布的数据不是有效的JSON。在PHP5.6.10
上,当我运行与问题中发布的完全相同的代码时,我返回了0.7.4
。但是,json\u last\u error\u msg()
正确地报告了语法错误。您能否通过调用json\u last\u error\u msg()
在您的版本上进行验证?请稍候0.7.4
是php的有效json编码字符串吗?@deceze:它不是。。。你说得对。它必须是$value=''0.7.4'代码>将在所有旧版本中使用。不是严格的json,但至少被json忽略,没有使用意外条件修改。看起来好像试图将“0.7.4”解码为浮点,忽略第二个点。奇怪的决定。我得说,奇怪的是你没有得到一个错误的结果。在JS中解码后,您会如何使用0.7.4
?您发布的数据不是有效的JSON。在PHP5.6.10
,当我运行与问题中发布的完全相同的代码时,我将得到0.7.4
返回。但是,json\u last\u error\u msg()
正确地报告了语法错误。你能通过调用json\u last\u error\u msg()
来验证你的版本吗?我知道这不是一个有效的值,因为我希望json\u decode会有一个错误和一个null,但在一些php版本中,我得到float(0.7)和echo(json\u last\u error()==json\u error\u NONE)//true
我知道这不是一个有效的值,正因为如此,我希望json_decode会出现错误和null,但在某些php版本中,我会得到float(0.7)和echo(json_last_error()==json_error\u NONE)//true
问题是我在Amazon elastic beanstalk实例中出现这种行为。。。我需要一个w