如何在php中使用带有“复杂”结构的json?

时间:2010-11-12 09:05:12

标签: php arrays json multidimensional-array

我想用json + php作为我的数据。我阅读了更多文档来执行此操作,基本功能是json_decode()和json_encode()。我的问题是,阅读更多文档并阅读不同的结构示例在我身上产生了很多疑问。

我想创建一个这样的结构,从基础开始到容器:

  • 有一个Base,它有2个属性:id和value
  • 有一个可以有多个Base的操作
  • 有一个Command可以有多个操作(如果可能的话,还有属性callad名称)

我心中的结构是这样的......

[ //The start of Commands

  //Can make a property name here like "name":"puls1"
  [ //Operation1
 { //Base1
   "id":"22398",
   "value":"255"
 },
 { //Base2
   "id":"22657",
   "value":"80",
 },
 { //Base3
   "id":"7928",
   "valore":"15"
 }
  ],

  [ //Operation2
 { //Base1
   "id":"22398",
   "value":"0"
 },
 { //Base2
   "id":"22657",
   "value":"0",
 },
 { //Base3
   "id":"7928",
   "valore":"0"
 }
  ],

] //The close of Commands

但是我已经把[和{以不正确的顺序认为...... 我怎样才能制作出像这样的json结构?设置命令后插入新操作或删除操作?

感谢所有..

//回答我做了这个代码

class Base 
{
  var $i;
  var $value;

  function __construct($i,$v) 
  {
   $this->id = $i;
   $this->value = $v;
   }
}

$a = new Base('1','11');
$b = new Base('2','10');
$c = new Base ('3','20');
$d = new Base ('4','30');

class Operation
{
  var $name;
  var $values = Array();

  function __construct($a) 
  {
   $this->name = $a;
  }

  public function addArray($a)
  {
   array_push($this->values,$a);
  } 
}

$oper1 = new Operation("op1");
$oper1->addArray($a);
$oper1->addArray($b);

$oper2= new Operation("op2");
$oper2->addArray($c);
$oper2->addArray($d);

$commands = Array($oper1,$oper2);

echo json_encode($tot);

现在的问题是如何进行还原操作?这样使用json_decode并将其封装在适当的结构中?

3 个答案:

答案 0 :(得分:4)

json列表类型[]等于php中没有键的数组。

json字典类型{}等于php中的键控数组。

你想要的是这样的:

$json = array(
   array(
     array('id' => $num, 'value' => $val), // Base 1
     array('id' => $num_1, 'value' => $val_1), // Base 3
     array('id' => $num_2, 'value' => $val_2), // Base 2
   ),
   array(...),
   array(...),
);

答案 1 :(得分:2)

如果您正在使用PHP,我将从本机PHP类构建对象(json_encode也可以与php对象一起使用):

class Base {
    var $id;
    var $value;
}

然后,只需将这些对象放在各种数组中,您也可以使用addToOperation($baseObj)addToCommands($operationObj)等方法进行抽象。

您正在处理本机数据结构(Arrays),因此您可以使用本机方法删除(array_pop)和添加(array_push)数据。

答案 2 :(得分:1)

这样的事情应该有效

// Build up your data as a mulitdimensional array
$data = array(
    'operations' => array(
        0 => array(
           'bases' => array (
            0 => array(
                'id' => '22398',
                 'value' => 'whatever'
            ),
            1 => array(
                'id' => 'id goes here',
                 'value' => 'value goes here'
            ),
         1 => array(
            //data for operation 2
         )
);

// Then use json_encode
$json = json_encode($data);

我的语法可能不完美但是应该给你这个想法。要访问它,您将使用像

这样的代码
 $operations = json_decode($data);
 foreach ($operations as $op) {
     foreach ($op->bases as $base) {
         //Logic goes here
      }
 }

希望这有帮助。