как массив json_encode, который содержит строковый элемент json?Вывод не должен содержать обратную косую черту "\" - PullRequest
0 голосов
/ 23 сентября 2018

Например

$json_string = '{"employee" : { "name" : "test","id" : "1"}}';

    $array = [
                "center"    => "Mumbai",
                "data"      =>  $json_string
    ];

  //echo json_encode($array,JSON_PRETTY_PRINT);
  //echo json_encode($array,JSON_UNESCAPED_SLASHES);
  echo json_encode($array,JSON_UNESCAPED_UNICODE);

Это дает следующий вывод с обратной косой чертой в строке json:

{
 "center": "Mumbai",
 "data": "{\"employee\" : { \"name\" : \"test\",\"id\" : \"1\"}}"
}

Даже я пробовал json_encode с JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_UNESCAPED_UNICODE, но выводится тот же вывод 100 **

Вывод, который я хочу получить:

{
 "center": "Mumbai",
 "data": { "employee" : { "name" : "test","id" : "1"}}

}

РЕДАКТИРОВАТЬ

Спасибо за ваш ответ, я принимаю обаответы, и оба, безусловно, будут работать с моим вопросом.


Редактирование этого вопроса bcoz Мое требование немного отличается, я прошу прощения за это.На самом деле я работаю с Lumen API и извлекаю записи из базы данных, и таблицы содержат один столбец MYSql JSON, а другие - обычные столбцы mysql.Например, в таблице test_json есть столбец с типом данных json 'employee_details_json'

CREATE TABLE `test_json` (
`employee_id` int(11) NOT NULL AUTO_INCREMENT,
 `emplyee_name` varchar(45) DEFAULT NULL,
`employee_details_json` json DEFAULT NULL,
`status` int(11) DEFAULT NULL,
`created_date` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`employee_id`)
);

Извлечение данных из этой таблицы и отправка обратно в виде ответа json является для меня сложной задачей.Bcoz Lumen преобразует весь массив в ответ JSON Lumen JSON, добавляя обратную косую черту в столбец JSON.и это пример одной таблицы, есть много таблиц, которые содержат столбцы JSON.Вот почему я не могу жестко закодировать имя столбца для декодирования JSON перед кодированием.

Извините за плохой английский.Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

вы можете выбрать из первого решения, данного из @Ussaid или другого метода, без декодирования строки и последующего ее кодирования, что может занять больше времени.Другой способ получить желаемый результат - использовать полоски:

Вот пример с желаемым результатом:

$json_string = '{"employee" : { "name" : "test","id" : "1"}}';
$array = [
    "center"    => "Mumbai",
    "data"      =>  $json_string
];
echo stripslashes(json_encode($array));

Надеюсь, это поможет и удачной кодировки.

0 голосов
/ 23 сентября 2018

Попробуйте это

$json_string = '{"employee" : { "name" : "test","id" : "1"}}';
$array = [
     "center"    => "Mumbai",
     "data"      =>  json_decode($json_string)
];
echo json_encode($array);

Вывод

{"center":"Mumbai","data":{"employee":{"name":"test","id":"1"}}}

ОБНОВЛЕНИЕ Вот как я это сделаю в PHP

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 
$response = array();
$sql = "SELECT * FROM test_json WHERE employee_id = 1";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
    $response["success"] = 1;
    // output data of each row
    $a = 0;
    while($row = $result->fetch_assoc()) {
        $row["employee_details_json"] = json_decode($row["employee_details_json"]);
        $response["data"][$a] = $row;
        $a++;
    }
}
echo json_encode($response);
$conn->close();

/*
In Lumen I guess you can achieve this by
I don't know if its the proper way as i never used this framework but you can give it a try
*/
$results = DB::select('SELECT * FROM test_json WHERE employee_id = :employee_id', ['employee_id' => 1]);
$a = 0;
foreach ($results as $row) {

    $results[$a]->employee_details_json = json_decode($row->employee_details_json);
    $a++
}
echo json_encode($results);
...