У меня есть 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));
});
но возвращенный объект все еще находится в []
Если я правильно понимаю, я думаю, что самый простой способ — использовать индекс для получения элемента в массиве.
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;
}