Как использовать JSON в PHP с «сложной» структурой? - PullRequest
2 голосов
/ 12 ноября 2010

Я хочу использовать json + php для моих данных.Я прочитал больше документа, чтобы сделать это, и основные функции - это json_decode () и json_encode ().Моя проблема в том, что чтение большего количества документов и прочтение различных примеров структуры породило у меня много сомнений.

Я хочу создать структуру, подобную этой, начинающуюся от базового к контейнеру:

  • есть База, которая имеет 2 свойства: id и значение
  • есть Операции, которые могут иметь несколько Базы
  • есть Команда, которая может иметь несколько Операций (и, если возможно,имя свойства)

структура в моем уме такая ...

[ //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 ]

4 голосов
/ 12 ноября 2010

Тип списка 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(...),
);
2 голосов
/ 12 ноября 2010

Если вы работаете с PHP, я бы конструировал объекты из нативных классов PHP (json_encode также работает с объектами php):

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

Тогда это просто вопрос размещения этих объектов в различных массивах, которые вы также можете абстрагировать такими методами, как addToOperation($baseObj) и addToCommands($operationObj).

Вы имеете дело с собственными структурами данных ( Массивы ), поэтому вы можете использовать собственные методы для удаления (array_pop) и добавления (array_push) данных.

1 голос
/ 12 ноября 2010

Как то так должно работать

// 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
      }
 }

Надеюсь, это поможет.

...