2016-01-13 54 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); 
    } 
} 

那么,如何使用存储在$r中的数据生成所需的JSON呢?

回答

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();用于从php中的数组转换json中的数据。

$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', 
); 

你需要将其转换为JSON之前建立正确的PHP数组。我建议在递归办法做下去,而修剪空的空间太:

// 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);