Как сгенерировать JSON с помощью PHP?
Я никогда раньше не использовал JSON, и я пытаюсь использовать следующий javascript: http://jqueryselectcombo.googlecode.com/files/jquery.selectCombo1.2.6.js
Требуется вывод в формате JSON в следующем формате:
[{oV: 'myfirstvalue', oT: 'myfirsttext'},
{oV: 'mysecondvalue', oT: 'mysecondtext'}]
Не могли бы вы привести меня к примеру о том, как генерировать вывод JSON, как описано выше, с использованием PHP?
6 ответов
Простейшим способом, вероятно, было бы начать с ассоциативного массива пар, которые вы хотите:
$data = array("myfirstvalue" => "myfirsttext", "mysecondvalue" => "mysecondtext");
затем используйте foreach и некоторую конкатенацию строк:
$jsontext = "[";
foreach($data as $key => $value) {
$jsontext .= "{oV: '".addslashes($key)."', oT: '".addslashes($value)."'},";
}
$jsontext = substr_replace($jsontext, '', -1); // to get rid of extra comma
$jsontext .= "]";
Или, если у вас последняя версия PHP, вы можете использовать встроенные функции кодирования json - просто будьте осторожны с тем, какие данные вы передаете им, чтобы они соответствовали ожидаемому формату.
Когда у вас есть данные PHP, вы можете использовать json_encode
функция; это связано с PHP начиная с PHP 5.2
В вашем случае ваша строка JSON представляет:
- список, содержащий 2 элемента
- каждый из которых является объектом, содержащим 2 свойства / значения
В PHP это создаст структуру, которую вы представляете:
$data = array(
(object)array(
'oV' => 'myfirstvalue',
'oT' => 'myfirsttext',
),
(object)array(
'oV' => 'mysecondvalue',
'oT' => 'mysecondtext',
),
);
var_dump($data);
var_dump
получает вас:
array
0 =>
object(stdClass)[1]
public 'oV' => string 'myfirstvalue' (length=12)
public 'oT' => string 'myfirsttext' (length=11)
1 =>
object(stdClass)[2]
public 'oV' => string 'mysecondvalue' (length=13)
public 'oT' => string 'mysecondtext' (length=12)
И, кодируя это в JSON:
$json = json_encode($data);
echo $json;
Ты получаешь:
[{"oV":"myfirstvalue","oT":"myfirsttext"},{"oV":"mysecondvalue","oT":"mysecondtext"}]
Кстати: прокрутите то, что я помню, я бы сказал, что ваша строка JSON недопустима - данные JSON: вокруг строки должны быть двойные кавычки, включая имена свойств объектов
См. http://www.json.org/ для грамматики.
Надеюсь это поможет:-)
Это код PHP для создания формата JSON
<?php
$catId = $_GET['catId'];
$catId = $_POST['catId'];
$conn = mysqli_connect("localhost","root","","DBName");
if(!$conn)
{
trigger_error('Could not Connect' .mysqli_connect_error());
}
$sql = "SELECT * FROM TableName";
$result = mysqli_query($conn, $sql);
$array = array();
while($row=mysqli_fetch_assoc($result))
{
$array[] = $row;
}
echo'{"ProductsData":'.json_encode($array).'}'; //Here ProductsData is just a simple String u can write anything instead
mysqli_close('$conn');
?>
Это одно из самых фундаментальных правил в разработке php:
НЕ СОЗДАВАЙТЕ СТРОКУ JSON ВРУЧНУЮ. ИСПОЛЬЗОВАТЬ
json_decode()
.
Если вам нужно заполнить данные в цикле, затем сначала соберите все свои данные, а затем вызовите только один раз.
Не пытайтесь обернуть / добавить / добавить дополнительные данные в закодированную строку json. Если вы хотите добавить данные в полезную нагрузку json, затем декодируйте их, добавьте данные, а затем перекодируйте их.
Не имеет значения, передаете ли вы тип объекта или данные типа массива в
json_encode()
- по умолчанию он по-прежнему будет создавать строку с использованием квадратных скобок для индексированных массивов и фигурных скобок для повторяемых данных с неиндексированными ключами.
Код:
$array = [
[
'oV' => 'myfirstvalue',
'oT' => 'myfirsttext'
],
[
'oV' => 'mysecondvalue',
'oT' => 'mysecondtext'
]
];
echo json_encode($array);
Выход:
[{"oV":"myfirstvalue","oT":"myfirsttext"},{"oV":"mysecondvalue","oT":"mysecondtext"}]
Для ясности я должен указать, что желаемый результат OP недействителен json, потому что вложенные ключи не заключены в двойные кавычки.
Вы можете использовать stdClass, добавить свойства и json_encode объекта.
$object = new stdClass();
$object->first_property = 1;
$object->second_property = 2;
echo '<pre>';var_dump( json_encode($object) , $object );die;
Вуаля!
string(40) "{"first_property":1,"second_property":2}"
object(stdClass)#43 (2) {
["first_property"]=>
int(1)
["second_property"]=>
int(2)
}