Как обеспечить алфавитный порядок с помощью JSON-схемы объектов JSON в массивах JSON? - PullRequest
0 голосов
/ 16 мая 2018

Я хотел бы убедиться, что объекты json в массиве json упорядочены правильно по определенному свойству со схемой json.

Возможно ли это?И если да, то как я могу создать такую ​​схему json?

Схема:

{
  "type": "object",
  "properties": {
    "cities": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "shortName": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "showInMap": {
            "type": "boolean"
          },
          "active": {
            "type": "boolean"
          }
        },
        "??ORDERBY??": "shortName",
        "??ORDER??": "ASC",
        "required": [
           "shortName"
        ]
      }
    }
  }
}

Я хотел бы отфильтровать json файлы, которые не являются правильнымиприказал. Пример: (неверно)

{
  "cities": [
    {
      "shortName": "NY",
      "name": "New York",
      "showInMap": true,
      "active": true
    },
    {
      "shortName": "LD",
      "name": "London",
      "showInMap": true,
      "active": false
    },
    {
      "shortName": "MO",
      "name": "Moscow",
      "showInMap": false,
      "active": false
    }
  ]
}

И принимать json файлы, которые упорядочены правильно. Пример: (действителен)

{
  "cities": [
    {
      "shortName": "LD",
      "name": "London",
      "showInMap": true,
      "active": false
    },
    {
      "shortName": "MO",
      "name": "Moscow",
      "showInMap": false,
      "active": false
    },{
      "shortName": "NY",
      "name": "New York",
      "showInMap": true,
      "active": true
    }
  ]
}

1 Ответ

0 голосов
/ 16 мая 2018

РЕДАКТИРОВАТЬ : Этот ответ не использует json schema.

Вот минимальное решение, работающее с данными вашего образца. Это небезопасно для производства, поскольку в нем отсутствуют всевозможные проверки для undefined, но я думаю, что вы можете улучшить его по своему желанию.

function isSorted(array, sortKey) {
  return array.reduce((ordered, item, index) => {
    return index > array.length - 2 ? ordered : ordered && item[sortKey] < array[index + 1][sortKey];
  }, true);
}

const incorrectCase = [{
    "shortName": "NY",
    "name": "New York",
    "showInMap": true,
    "active": true
  },
  {
    "shortName": "LD",
    "name": "London",
    "showInMap": true,
    "active": false
  },
  {
    "shortName": "MO",
    "name": "Moscow",
    "showInMap": false,
    "active": false
  }
]

const correctCase = [{
    "shortName": "LD",
    "name": "London",
    "showInMap": true,
    "active": false
  },
  {
    "shortName": "MO",
    "name": "Moscow",
    "showInMap": false,
    "active": false
  }, {
    "shortName": "NY",
    "name": "New York",
    "showInMap": true,
    "active": true
  }
];

console.log('incorrect case: ', isSorted(incorrectCase, "shortName"));
console.log('correct case: ', isSorted(correctCase, "shortName"));
...