2015-05-07 17 views
0

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

{"offset":1,"result":{"host":"x.x.x.x","count":123"}} 

Я хочу, чтобы быть в следующем формате

{"offset":1,"result":[{"host":"x.x.x.x","count":123"}]} 

Примечание: любезно посмотреть на аддитивных квадратные скобки в сложенном формате JSON.

Как я могу достичь этого в PHP. Я довольно новичок в PHP немного помогает здесь. Спасибо :)

+1

где ваши коды, которые генерируют строку JSON – Ghost

+0

@Ghost: Он получил его от API – LolWalid

+0

я dont't знаю, если вы можете сделать это, но если есть массив, который означает, что вы можете иметь много результатов один день. Если вы это сделаете, подумайте об этом случае? – LolWalid

ответ

0

Вы должны быть в состоянии сделать это, используя json_decode() и json_encode() функции РНР. Что-то вроде:

$jsonFromApi = '{"offset":1,"result":{"host":"x.x.x.x","count":123}}'; 
$array = json_decode($jsonFromApi, true); 
$array['result'] = array($array['result']); 
$newJson = json_encode($array); 

Edit: Вот пример использования Еогеаспа для этого к серии из разделенной запятой JSon строки.

$originalData = '{"offset":1,"result":{"host":"x.x.x.x","count":123}},{"offset":2,"result":{"host":"x.x.x.x","count":123}},{"offset":3,"result":{"host":"x.x.x.x","count":123}}'; 

// Convert original data to valid JSON by wrapping it in brackets []. Makes it a JSON array. 
$json = '['.$originalData.']'; 
$array = json_decode($json, true); 

$convertedJsonStrings = array(); 
foreach ($array as $data) { 
    $data['result'] = array($data['result']); 
    $convertedJsonStrings[] = json_encode($data); 
} 
echo implode(',', $convertedJsonStrings); 

Здесь мы не можем напрямую использовать json_decode() для $originalData, поскольку он не является допустимым JSON, как это.

+0

Это работает .. но что, если у меня есть аналогичные строки JSON, которые разделены запятой. например: {"offset": 1, "result": {"host": "xxxx", "count": 123}}, {"offset": 2, "result": {"host": "xxxx" , "count": 333}} –

+0

Если у вас несколько аналогичных строк JSON в том же формате, которые просто разделены запятой, вы можете просто выполнить '$ jsonStrings = explode (',', $ originalData);' и затем пропустить через ' $ jsonStrings', используя foreach и запустив приведенный выше код для каждой строки. И в конце, если необходимо, используйте 'implode()', чтобы поместить преобразованные строки назад вместе, разделенные запятой, если хотите. – Haprog

+0

Я отредактирую свое сообщение, чтобы показать пример использования foreach в этом случае. – Haprog

0

Конвертировать оригинал в объект JSON, вынуть result.

var originalJSONObj = JSON.parse(original); 
var result = originalJSONObj.result; 

Создайте еще один объект с modifiedJSONObj.offset = 1 и modifiedJSONObj.result = [] и, наконец, modifiedJSONObj.result.push(result).

+0

Ваш ответ выглядит как JavaScript. Вопрос в том, чтобы сделать это в PHP. – Haprog

+0

да я хочу сделать это в PHP ... но спасибо за ур ответить :) –

+0

Да. Извините, я не знаю синтаксиса PHP. – Vish

0

В PHP, что-то вроде:

$json = '{"offset":1,"result":{"host":"x.x.x.x","count":123}}'; 
$data = json_decode($json); 
$data->result = [$data->result]; 
$json = json_encode($data); 
var_dump($json); 
0
// i fixed the json that you are able to receive from the api 
// maybe you could check it also 
$data = '{ 
    "offset": 1, 
    "result": { 
     "host": "x.x.x.x", 
     "count": "123" 
    } 
}'; 

// decode the json from api 
$data = json_decode($data, true); 

// create new data from decoded data 
$new_data = array(
    'ofsset' => $data['offset'], 
    'result' => array(
     $data['result'] 
    ) 
); 

// encode it again 
echo json_encode($new_data);