Генерация JSON без слешей с использованием PHP & amp; MySQL

я хочу генерировать значения JSON именно так как этот здесь

{
"feed": [
{
"id": 1,
"name": "National Geographic Channel",
"image": "http://api.androidhive.info/feed/img/cosmos.jpg",
"status": "\"Science is a beautiful and emotional human endeavor,\" says Brannon Braga, executive producer and director. \"And Cosmos is all about making science an experience.\"",
"profilePic": "http://api.androidhive.info/feed/img/nat.jpg",
"timeStamp": "1403375851930",
"url": null
},
{
"id": 2,
"name": "TIME",
"image": "http://api.androidhive.info/feed/img/time_best.jpg",
"status": "30 years of Cirque du Soleil's best photos",
"profilePic": "http://api.androidhive.info/feed/img/time.png",
"timeStamp": "1403375851930",
"url": "http://ti.me/1qW8MLB"}
]
}

и каждый раз, когда я пытаюсь сделать такую ​​вещь, я получаю этот вывод

{
"feed": [{
"id": "1",
"name": "National Geographic Channel",
"image": "http:\/\/api.androidhive.info\/feed\/img\/cosmos.jpg",
"status": "Science is a beautiful and emotional human endeavor",
"profilePic": "http:\/\/api.androidhive.info\/feed\/img\/nat.jpg",
"timeStamp": "1403375851930",
"url": "null"}, {
"id": "2",
"name": "National Geographic Channel",
"image": "http:\/\/api.androidhive.info\/feed\/img\/cosmos.jpg",
"status": "Science is a beautiful and emotional human endeavor",
"profilePic": "http:\/\/api.androidhive.info\/feed\/img\/nat.jpg",
"timeStamp": "1403375851930",
"url": "null"}]
}

посмотрите на идентификатор в первом json и URL
я хочу, чтобы мой JSON был точно таким же, как первый

мой php код:

<meta http-equiv="Content-Type" content="application/json; charset=utf-8 ">
<?php

include "../funcs/db.php";
$SelectPosts = mysql_query("SELECT * FROM usf_mobile");
$rows = array();
while($r = mysql_fetch_assoc($SelectPosts)) {
$rows['feed'][] = $r;
}

print json_encode($rows);

?>

я попробовал много решений здесь переполнение стека и я не нашел никого, кто мог бы быть близко к моей проблеме.

1

Решение

Приведите значение идентификатора к целому, используя (int)и экранировать косые черты URL с помощью JSON_UNESCAPED_SLASHES;

<meta http-equiv="Content-Type" content="application/json; charset=utf-8 ">
<?php

include "../funcs/db.php";
$SelectPosts = mysql_query("SELECT * FROM usf_mobile");
$rows = array();
while($r = mysql_fetch_assoc($SelectPosts)) {
$r['id'] = (int)$r['id'];
$rows['feed'][] = $r;
}

print json_encode($rows,JSON_UNESCAPED_SLASHES);

?>

Надеюсь это поможет.

2

Другие решения

Попробуйте следующий пример, если вы используете PHP 5.4+

 $rows = json_encode($rows,JSON_NUMERIC_CHECK | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);

Для более низких версий вы можете ввести значения в вашем массиве, чтобы получить желаемый результат.

2

Ты используешь mysql_query() (что вы не должны делать, потому что это устарело). Проблема в том, что у вас нет возможности привязать столбцы к типам значений (строка, целое число и т. Д.). Все возвращается в виде строки.

Я бы предложил использовать mysqli или же PDO где вы можете указать типы столбцов при привязке к ним. Без этого вам нужно будет вручную привести ваши значения перед кодированием в JSON.

2

Если у вас есть PHP 5.4+, вы можете использовать JSON_UNESCAPED_SLASHES а также JSON_NUMERIC_CHECK чтобы получить результаты, которые вы хотите.

json_encode($array, JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK)

Вы можете найти все это на странице руководства для json_encode.

1
По вопросам рекламы [email protected]