【问题标题】:How can I convert a json web token into a json object?如何将 json Web 令牌转换为 json 对象?
【发布时间】:2019-11-01 02:35:33
【问题描述】:

我正在尝试将我的 JSON Web 令牌解码为 JSON 解析版本,

但它所做的只是在字符串中添加斜线。


这是我正在测试的代码:

<?php

$string = base64_decode("eyJpZCI6IDYsICJ1c2VybmFtZSI6IkNsZW1lbnMiLCAiYXV0aGx2bCI6NX0");

$jsonObject = json_encode($string, JSON_UNESCAPED_SLASHES);

echo $jsonObject;
?>

我想得到的数据应该是这样的:

[       
'id': 6,
'username': Clemens,
'authlvl': 5
]

但它会变成这样:

{"id": 6, "username":"Clemens", "authlvl":5}

或者这个:

"{\"id\": 6, \"username\":\"Clemens\", \"authlvl\":5}"

谁能告诉我我做错了什么,我已经尝试了很多类似的方法:

Why is json_encode adding backslashes?

https://www.youtube.com/watch?v=SKswJH7_plQ

【问题讨论】:

  • 您想要的版本不是有效的 JSON(您只能拥有具有命名属性的对象),这个 {"id": 6, "username":"Clemens", "authlvl":5} 是正确的 JSON。

标签: php jwt


【解决方案1】:

我认为你犯了一个小错误。

base64 编码的数据已经是 JSONString,因此要在 PHP 中使用它,您需要 json_decode() 它而不是 json_encode()

$string = base64_decode("eyJpZCI6IDYsICJ1c2VybmFtZSI6IkNsZW1lbnMiLCAiYXV0aGx2bCI6NX0");
echo $string.PHP_EOL;
$jsonObject = json_decode($string);

print_r($jsonObject);

回声结果

{"id": 6, "username":"Clemens", "authlvl":5}

print_r()的结果

stdClass Object
(
    [id] => 6
    [username] => Clemens
    [authlvl] => 5
)

或者回显$string

$string = base64_decode("eyJpZCI6IDYsICJ1c2VybmFtZSI6IkNsZW1lbnMiLCAiYXV0aGx2bCI6NX0");
echo $string.PHP_EOL;

结果,有效的 JSON

{"id": 6, "username":"Clemens", "authlvl":5}

【讨论】:

  • 简单来说,谢谢你的信息!
猜你喜欢
  • 2015-10-30
  • 1970-01-01
  • 2017-07-29
  • 1970-01-01
  • 2016-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-16
相关资源
最近更新 更多