我是PHP编程的新手,我尝试用简单的PHP制作简单的API。在我的代码段下面:
$con = mysqli_connect(HOST, USER, PASS, DB);
$sql_results = mysqli_query($con, "SELECT * FROM `table-images`");
$rows = array();
while($r = mysqli_fetch_assoc($sql_results)) {
$rows[] = $r;
}
echo'{"response":'.json_encode($rows).'}';
上面的代码有如下的JSON输出:
{"response":[{"id":"31","shirtImage":"Content\/Images\/Short Sleeve\/874be7b82812f76c944d71706c9651eb.gif"},{"id":"32","shirtImage":"Content\/Images\/Short Sleeve\/b-Cleaned.png"}]}
我想知道为什么字段shirtImage
的值有额外的符号\
。在我的数据库中,值是正确的示例Content/Images/Short Sleeve/b-Cleaned.png
,但是当它编码为JSON时,输出已更改。如何解决这个问题?
我找到一些关于我的案例的关键字,但它仍然不起作用。
答案 0 :(得分:1)
没有什么要解决的。
JSON是一种以可存储和可传输的方式对数据结构进行编码的格式。当需要处理数据时,您必须从JSON对其进行解码。
您可以在PHP中使用json_decode()
或在JavaScript中使用JSON.parse()
来还原原始数据并使用它。
许多其他语言提供了用于JSON的功能或库。
您不应该手动生成JSON。从数据中生成JSON的正确方法是:
$response = ['response' => $rows];
echo json_encode($response);
由于存储在$rows
中的值是数组(并且因为在PHP中解码JSON时,在PHP中使用数组比使用裸对象更容易使用),建议将true
作为json_decode()
的第二个参数。这样,它在还原的数据结构中使用数组。
否则,它将生成stdClass
的实例,它们是纯PHP对象。数组具有更多用途。
答案 1 :(得分:0)
Its due to escaping / with `\` and it will be removed when you decode your json back.
尝试将其解码回来。
$d = json_decode('{"response":[{"id":"31","shirtImage":"Content/Images/Short Sleeve/874be7b82812f76c944d71706c9651eb.gif"},{"id":"32","shirtImage":"Content/Images/Short Sleeve/b-Cleaned.png"}]}');
print_r($d);die; // This will give you the original data with out `\`
答案 2 :(得分:0)
json_encode()转义正斜杠。尝试使用:
echo'{"response":'.json_encode($rows, JSON_UNESCAPED_SLASHES).'}';