2014-12-26 2 views
0

Я извлекаю «form_json» из базы данных, в которой json сохранен для всех шаблонов форм. Код, который:Json строки decode mysql

<?php 
include ('connection.php'); 


$id = intval($_GET['frmid']); 
$results = mysqli_query($conn, "SELECT form_json FROM form WHERE form_id=$id");  
while ($row = mysqli_fetch_array($results))  
{  
$url = $row['form_json']; 
echo $url; //Outputs: 2 

} 
?> 

Теперь я хочу, чтобы расшифровать все эти jsons, которые сохраняются в строке form_json. Есть все равно, чтобы пройти или что-то еще?

$json ='{"value":"Form Title","name":"title"}'; 
    var_dump(json_decode($json)); 
    var_dump(json_decode($json, true)); 

Так мы декодируем, но это для одного шаблона из одной или нескольких форм. Я могу иметь много строк json/много шаблонов форм, сохраненных в базе данных. Я должен был бы расшифровать все.

+0

Не уверен, что вы просите. Это просто 'var_dump (json_decode ($ url))'? – Barmar

ответ

0

Лучшее, что вы можете сделать для этого - хранить одиночные строки json в массиве. Проблема заключается в том, что ваши строки JSON закодированы, так что вам нужно Concat их сначала, если вы хотите, чтобы все результаты сразу:

$json = array(); 
$results = mysqli_query($conn, "SELECT form_json FROM form WHERE form_id=$id");  
while ($row = mysqli_fetch_array($results)) {  
    array_push($json, $row['form_json']); 
} 

$json = implode(",",$json); // concats all json strings with commas 

На данный момент, у вас есть одна большая строка. Для того, чтобы сделать успешную расшифровку, вы должны обернуть контейнер вокруг строки, чтобы быть действительным синтаксическим анализом, так как ваши значения уже JSON и вам нужен контейнер для них:

$json = '{"templates": [' . $json . ']}'; 

Теперь у вас есть правильная строка JSON, которая может быть декодированным либо как массив, либо объект. Для лучшего понимания простого рабочего примера:

<?php 
    $json1 = '{"value":"Form Title","name":"title"}'; 
    $json2 = '{"value":"A Message","name":"message"}'; 

    $arr = array($json1, $json2); 
    $json = implode(",", $arr); 
    $json = '{"templates": ['.$json.']}'; 
    $json = json_decode($json, true); // true if you want an array, false if you want an object 

    echo "<pre>"; 
    print_r($json); // returns a multidimensional array of all templates 
    echo "</pre>"; 
?> 
0
$json = '{"value":"Form Title","name":"title"}'; 
$data = json_decode($json); 
$value = $data->value; //will output = Form Title 
$title = $data->title; //will output = title 

я надеюсь, что эта помощь