2015-08-12 2 views
2

У меня есть массив, хранящийся в таблице MySQL, как это:Получить MySQL сохраненный массив в виде строки и преобразовать массив в объект JSON

[3,5,6,7,8] 

Когда я выбираю его, закодировать его как JSON в PHP и затем проанализируйте его в javascript-объекте, вместо того, чтобы стать массивом, он просто становится строкой «[3,5,6,7,8]». Я знаю, что невозможно хранить его в виде массива в одном поле, поэтому .. что я могу сделать, чтобы он правильно преобразовывался в массив вместо строки?

Мой текущий код:.

test = JSON.parse('[{"id":43,"incidence":"[0,3,6,7]"}]') 

Я мог бы решить, что удаление "на строку, но MySQL возвращает его со строкой, PHP кодирует с кавычками и Javascript разбирает котировок Так в основном, есть способ, чтобы удалить его в этом процессе?

+0

Вы можете показать свой код? как вы его кодируете и как вы его разбираете? – CodeGodie

+0

после вашего начального разбора вы пробовали это: 'JSON.parse (test [0] .incidence)'? – CodeGodie

+0

В результатах вашей базы данных вы всегда будете иметь только 1 результат строки? или это будет иногда несколько? Я спрашиваю об этом, потому что в настоящее время у вас есть массив массивов, который делает дополнительную итерацию в будущем. – CodeGodie

ответ

2

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

$results = array(
    array(
     "id" => 43, 
     "incidence" => "[0,3,6,7]" 
    ) 
); 

Поскольку incidence является строкой, то он дает вам эти ошибки при его использовании в JS , Чтобы решить, вам нужно превратить эту строку в массив. Теперь, так как вы можете иметь более одного результата (в том, что эти результаты базы данных), нужно перебирать массив результата и превратить эту строку в массив, как это:

foreach ($results as &$row) { // <-- notice the & symbol (Passing by reference) 
    $no_brackets = trim($row["incidence"], '[]');//if you stored your array as comma delimited value, you would not need this. 
    $row["incidence"] = explode(',', $no_brackets); 
} 

Наконец, используйте json_encode и передать его к JS.


Конечный результат:

<?php 
foreach ($results as &$row) { 
    $no_brackets = trim($row["incidence"], '[]'); 
    $row["incidence"] = explode(',', $no_brackets); 
} 
$json = json_encode($results); 
?> 

<script> 
    var obj = JSON.parse('<?= $json ?>'); 
    console.log(obj); 
</script> 

Надеется, что это помогает.

0

Вам нужно сделать немного пустячный, чтобы получить эту работу.

Попробуйте

<?php 

$string = '[3,5,6,7,8]'; 
$t = str_replace(array('[',']'), '', $string); 
$array = explode(',', $t); 
echo json_encode($array); 

В результате

["3","5","6","7","8"] 
Смежные вопросы