Отображение одного элемента массива из JSON в PHP(NODE.JS и ЭКСПРЕСС-API)


У меня есть Express, работающий на пользовательском API узла, который разбивает большой JSON на куски размером с укус для мобильного использования.

Один из разделов проходит через массу элементов и возвращает только один из них. Однако возвращаемые данные по-прежнему завернуты в [..], что затрудняет работу с ними.

Мой NODE.JS фрагмент кода, который касается моего перенаправленного запроса

app.get('/ppm/detail/operators/:operatorCode', function (req, res) {
    var with_operatorCode = ppm.RTPPMDataMsgV1.RTPPMData.OperatorPage.filter(function (item) {
        return item.Operator.code === req.params.operatorCode;
    });
    res.json(with_operatorCode);
});

Поэтому, если вы получите доступ к URL-адресу

http://(domain)3000/ppm/summary/operators/25

Возвращаются следующие данные

[
  {
    "code": "25",
    "keySymbol": "",
    "name": "First Great Western",
    "Total": "577",
    "PPM": {
      "rag": "G",
      "text": "94"
    },
    "RollingPPM": {
      "trendInd": "+",
      "displayFlag": "Y",
      "rag": "G",
      "text": "97"
    }
  }
]

Как я могу выньте этот объект из [..], чтобы он не возвращался как объект массива и отображался только как

 {
    "code": "25",
    "keySymbol": "",
    "name": "First Great Western",
    "Total": "577",
    "PPM": {
      "rag": "G",
      "text": "94"
    },
    "RollingPPM": {
      "trendInd": "+",
      "displayFlag": "Y",
      "rag": "G",
      "text": "97"
    }
  }

Альтернативно, как я могу работать с объектом [..] в PHP? Когда я пытаюсь повторить это с помощью

$operatorJSON=file_get_contents("operator.json");
$operator=json_decode($operatorJSON);

echo $operator->PPM->text;

Это ошибка, если JSON имеет []

Я подозреваю, что он рассматривается как объект массива

ОБНОВЛЕНИЕ: Я попытался выровнять массив

app.get('/ppm/detail/operators/:operatorCode', function (req, res) {
    var with_operatorCode = ppm.RTPPMDataMsgV1.RTPPMData.OperatorPage.filter(function (item) {
        return item.Operator.code === req.params.operatorCode;
    });

    var obj = arr.reduce(function(x, y, i) {
        x[i] = y;
        return x;
    }, {});

    res.json(obj(with_operatorCode));
});

Но возвращенный объект все еще находится в []

Author: MOLEDesign, 2015-04-16

3 answers

Если я правильно понимаю, я думаю, что самый простой способ - использовать индекс для получения элемента в массиве

res.json(with_operatorCode[0]);
 2
Author: qianjiahao, 2015-04-16 14:37:49

Конечно, [foo] обозначает, что это массив.

Вы могли бы адресовать элемент как [0], но это с большей вероятностью приведет к ошибке, если в фильтре нет элемента:

На стороне php:

$operator=json_decode($operatorJSON);
echo $operator[0]->PPM->text;

На стороне узла:

res.json(with_operatorCode[0]);

Разумнее всего было бы обработать его как массив:

$operator=json_decode($operatorJSON);
if (is_array($operator) && count($operator))
{
   echo $operator[0]->PPM->text;
}

Или, если фильтр может дать вам более одного:

$operator=json_decode($operatorJSON);
foreach ($operator as $op)
{
   echo $op->PPM->text;
}
 2
Author: John Green, 2015-04-16 20:58:39

Попробуйте сделать это:

 function toObject(arr) {
  var obj = {};
  for (var i = 0; i < arr.length; ++i)
    obj[i] = arr[i];
  obj rv;
}
 0
Author: Subburaj, 2015-04-16 12:40:07