为什么JSON结构中的数字键始终首先显示

时间:2018-03-06 11:03:50

标签: json angular typescript

(不能在单个陈述中总结问题,因此标题不明确)

我通过 Angular Typescript 创建一个JSON结构,其中当用户与组件的某些部分交互时,JSON结构会更新。

步骤

  1. 最初,正在考虑的JSON默认设置为以下内容:

    {
      "keyword": {
      "value": "product",
       "type": "main"
       }
    }
    
  2. 例如,用户选择一些参数Name。一旦用户遵守UI中的某些步骤,JSON结构就会更新为以下内容:

    {
      "keyword": {
      "value": "product",
      "type": "main"
      },
       "Name": {
       "value": " <hasProperty> Name",
       "type": "dataprop"
      }
    }
    
  3. 用户为dryTime之类的参数选择数值后,JSON会更新为以下内容:

    {
       "20": { // WHY WOULD 20 be here?
       "value": "<hasValue> 20",
       "type": "fValue"
       },
       "keyword": {
        "value": "Varnish",
        "type": "main"
       },
       "Name": {
       "value": " <hasProperty> Name",
       "type": "dataprop"
       },
      "dryingTime": {
      "value": " <hasProperty> dryingTime",
      "type": "dataprop"
       }
    }
    
  4. 我知道JSON是一个无序数据结构。但之前类似的东西的实现实际上运行良好,即此前的值20之前为20.0,并且在我的JSON中dryingTime之后显示。

    顺序对我来说至关重要,因为我使用for循环解析上述JSON中的所有键并将其存储在数组中。此数组需要按用户交互的顺序显示所有键。

    如果我决定继续使用JSON而不是使用数组来存储此类交互,我在哪里出错?

1 个答案:

答案 0 :(得分:0)

是的,JSON字段是无序的。 JSON数组是有序的。

如果你想保持元素的顺序,你可以像这样构建你的JSON:

{
    "keyword": {
        "value": "Varnish",
        "type": "main"
    },
    "props": [
        {
            "name": "dryingTime",
            "value": 20
        },
        {
            "name": "anotherOrderedField",
            "value": "fieldValue"
        }
    ]
}