Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP较新版本无法解码json“;类似“的版本”;字符串(例如:“0.7.4”-“0.7”)_Php_Json - Fatal编程技术网

PHP较新版本无法解码json“;类似“的版本”;字符串(例如:“0.7.4”-“0.7”)

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

在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。
这是有效的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);
两件事:

  • 不要检查结果是否为空(),检查结果是否为空。如果输入无法解码,则返回NULL

  • 输入字符串
    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);
    
    两件事:

  • 不要检查结果是否为空(),检查结果是否为空。如果输入无法解码,则返回NULL

  • 输入字符串
    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。在PHP
    5.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。在PHP
    5.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