Я извлекаю данные из базы данных mysqli, используя jquery post и php файл. Одно из полей моей базы данных - средний текст. Я извлекаю данные как json. Когда я помещал json-данные в json lint, я получаю:
Parse error on line 92:
...e said to himself, "Iwanttoknowmoreabout
-----------------------^
Expecting '}', ':', ',', ']'
... и я замечаю, что json lint удалил пробелы между некоторыми словами. Вот мой php-код:
require_once ('constants.php');
$db = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if (mysqli_connect_errno()) {
printf("Connect failed: %s", mysqli_connect_error());
exit;
}
$qNations = "SELECT b.Country, a.CountryCode, a.population, a.GDP, a.Income_level, b.Name, b.Age, b.Occupation, b.Origin, b.Neighborhood, b.FromHome, b.Video, b.PersonImage, b.CountryImage, b.WorldImage, b.Image2, b.Image3, b.Image4, b.Image5, b.Image6, b.Notes FROM countries a, people b where a.CountryID = b.CountryID order by a.Country";
$result = $db->query($qNations);
$numrecords = mysqli_num_rows($result);
$count = 0;
$strResults = '{"people": [';
while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
$count++;
$story = $row['Notes'];
$strResults .= '{
"country":"' . $row['Country'] . '",
"countryCode":"' . $row['CountryCode'] . '",
"population":"' . $row['population'] . '",
"GDP":"' . $row['GDP'] . '",
"income_level":"' . $row['Income_level'] . '",
"name":"' . $row['Name'] . '",
"age":"' . $row['Age'] . '",
"occupation":"' . $row['Occupation'] . '",
"origin":"' . $row['Origin'] . '",
"neighborhood":"' . $row['Neighborhood'] . '",
"story":"' . $story . '"
}';
if ($count < $numrecords) { //only add a comma if there are more records to go
$strResults .= ',';
}
}
$strResults .= ']}';
$db->close();
echo $strResults;
Каким образом можно форматировать и/или возвращать поле средней текстовой базы данных в json?
Вы этого не сделаете. Вы никогда не должны сами строить JSON. Вы создаете структуру данных NATIVE php, а затем используйте json_encode()
чтобы перевести ее для вас.
Это означает, что вместо построения строки json вместо этого вы создаете массив PHP:
$data = array();
while($row = $result->fetch_array(MYSQLI_ASSOC)) {
$data[] = $row;
}
echo json_encode($data);
Помните, что JSON - это просто код Javascript. Вы должны построить синтаксически действующий Javascript, что означает выход из любых внутренних котировок:
var name = 'Miles O'Brien'; /// what you're building - an unterminated string
var name = 'Miles O\'Brien'; // what you SHOULD have built.
echo json_encode($result->fetch_all(MYSQLI_ASSOC));
строку echo json_encode($result->fetch_all(MYSQLI_ASSOC));
echo json_encode($your_array);
в самом конце вашего сценария. И убедитесь, что никакой другой вывод не генерируется.