Отображение одного элемента массива из 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));
});
Но возвращенный объект все еще находится в []
3 answers
Если я правильно понимаю, я думаю, что самый простой способ - использовать индекс для получения элемента в массиве
res.json(with_operatorCode[0]);
Конечно, [
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;
}
Попробуйте сделать это:
function toObject(arr) {
var obj = {};
for (var i = 0; i < arr.length; ++i)
obj[i] = arr[i];
obj rv;
}