2016-01-13 4 views
0

У меня есть массив `$ A», включает в себя следующие данные:PHP: как сгенерировать этот JSON?

[0]=>'text', 
[1]=>'text1, text2, text3' 

Я хочу, чтобы создать объект JSON из этих данных, следующим образом:

'{"TestingApplications": [ 
    { "ApplicationName": "text" }, 
    { "ApplicationName": "text1" }, 
    { "ApplicationName": "text2" }, 
    { "ApplicationName": "text3" } 
    ] 
}' 

Что я сделал:

<?php 

$a=array(0=>"text", 1=>"text1, text2, text3"); 

$r = array(); 

foreach($a as $key => $val){ 

    if (strpos($val,',') !== false) { 

     $v = explode(',', $val); 

     foreach($v as $k => $l){ 

      array_push($r, $l); 
     } 
    } else{ 

     array_push($r, $val); 
    } 
} 

Итак, как я могу сгенерировать требуемый JSON, используя данные, хранящиеся в $r?

ответ

1

Я хотел бы начать с создания базовой структуры объекта JSon:

$temp = [ 
    'TestingApplications' => [], 
]; 

Далее, перебрать данные, которые вы имеете, и explode все запятых, содержащие строки, как вы делаете прямо сейчас :

foreach ($a as $value) { 
    $exploded = explode(',', $value);//no need to check for comma's 
    foreach ($exploded as $name) { 
     //perhaps consider calling trim on $name here 
     $temp['TestingApplications'][] = ['ApplicationName' => $name]; 
    } 
} 

Тогда, наконец, json_encode жребий:

return json_encode($temp); 

Хотя правду сказать: я действительно попытаюсь изменить способ предоставления данных моему коду. Если все строковые значения должны обрабатываться одинаково, совершенно неприемлемо, что иногда они назначаются отдельному ключу (в массиве $a), но в других случаях они находятся в строке, разделенной запятыми.
Это, по крайней мере, похоже на проблему X-Y

+0

Полный ответ, принимается. – Mohammad

0

Вы можете попробовать json_encode. Это будет возвращает JSON представление значения

Например:

$arr = array(0=>"text", 1=>"text1, text2, text3"); 
echo json_encode($arr); 

Надежда это поможет вам хорошо.

0

json_encode(); используется для преобразования данных в json из массива в php.

$array = array('TestingApplications'=>array("appname1"=>"text1","appname2"=>"text2", "appname3"=>"text3")); 
echo json_encode($array); 
+1

'array (" appname1 "=>" text1 "," appname1 "=>" text2 ",' <- Как вы думаете, что произойдет, если вы используете ключ 'appname1' более одного раза в одном массиве? –

+1

Я отредактировал свой ответ и, кстати, это пример для преобразования данных в json-формате. Возьмите идею и внесите ее в действие –

+0

Я уже реализовал это и разместил ее как [ответ] (http://stackoverflow.com/a/34761703/1230836), прежде чем вы разместили это сообщение. Просто указал на ошибку в фрагменте –

1

Попробуйте, как показано ниже:

<?php 
$a=array(0=>"text", 1=>"text1, text2, text3"); 

$r = array();$final = array(); 

foreach($a as $key => $val){ 

    if (strpos($val,',') >= 0) { 

     $v = explode(',', $val); 

     foreach($v as $k => $l){ 

      $r[]['ApplicationName']= "$l"; 
     } 
    } 
} 
$final['TestingApplications'] = $r; 

echo json_encode($final); 
?> 
+0

'' {"ApplicationName": "'. $ L.'"} '' Серьезно: вручную создавая строки JSON, а затем передавайте его в ' json_encode'? это никогда не будет работать –

+0

@EliasVanOotegem да, это приведет к двойному строковому объекту JSON. – Mohammad

+0

@EliasVanOotegem Я обновил свой ответ. Пожалуйста, проверьте сейчас и за ваши комментарии – AnkiiG

0

Если у вас есть этот источник:

$sourceArray = array(
    'text', 
    'text1, text2, text3', 
); 

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

// get a flat array 
$tmpArray = array_map(function($array) { 
    return explode(',', $array); 
}, $sourceArray); 

$flatArray = array(); 
array_walk_recursive($tmpArray, function($a) use (&$flatArray) { 
    $flatArray[] = trim($a); 
}); 

$toJsonArray = array('TestingApplications' => array()); 
foreach ($flatArray as $val) { 
    $toJsonArray['TestingApplications'][] = array(
     'ApplicationName' => $val, 
    ); 
} 

Тогда вы просто должны кодировать его в формате JSON: echo json_encode($toJsonArray);

0

Для создания требуемого JSON объект, массив должен будет следующим:

$arr = array(
'TestingApplications' => array(
    array('ApplicationName' => 'text'), 
    array('ApplicationName' => 'text1'), 
    array('ApplicationName' => 'text2'), 
    array('ApplicationName' => 'text3'), 
) 

);

и затем закодировать этот массив JSON как: echo json_encode($arr); Она возвращает объект JSON, необходимые

0

попробовать это.

$a=array(0=>"text", 1=>"text1,text2,text3"); 

$r = array(); 


    foreach($a as $key => $val){ 

     if (strpos($val,',') !== false) { 

      $v = explode(',', $val); 

      foreach($v as $k => $l){ 
       $final['ApplicationName']=$l; 
       $final_arr[]=$final; 
      } 
     } else{ 
       $final['ApplicationName']=$val; 
       $final_arr[]=$final; 
     } 
    } 


    $result['TestingApplications']=$final_arr; 
    echo json_encode($result); 
Смежные вопросы