【问题标题】:Javascript declaring a variable with complex JSON formatJavascript 声明具有复杂 JSON 格式的变量
【发布时间】:2017-09-16 12:37:32
【问题描述】:

我对 javascript 很陌生。 我正在尝试声明一个包含字符串和嵌套数组的变量。 前任:- 我需要一个变量, 数组(tableName、fields 和每个字段的多个 cmets)。

这是我的代码,

var data = [ {tableName : String, [{fieldName : String, [comments:String]}] } ]

这不行,请帮帮我。

【问题讨论】:

    标签: javascript variables jsonschema


    【解决方案1】:

    数组,表示为 [ value1, value2 ],其中只能有值。

    对象,表示为 { key1: value1, key2: value2 },只有键值对。

    把问题写成多行会更容易看出问题:

    var data = [
       { //we're in an object
          tableName: "some-string",
          //this next value doesn't have an associated key
          [
             {  //we're in an object
                 fieldName: "some-other-string",
                 //this next value doesn't have an associated key
                 [ 
                     comments: "some-comments-string" //we're in an array, so key-value pairs don't work.
                 ]
             }
          ]
       }
    ];
    

    我强烈推荐某种静态分析器,如 eslint 来帮助发现这些类型的问题。您可能打算做这样的事情(但问题并没有说清楚):

    var data = [
       { 
          tableName: "some-table-name",
          fields: [
             {  
                 fieldName: "some-field-name",                 
                 comments: [ 
                     "some-comment-1",
                     "some-comment-2"
                 ]
             }
          ]
       }
    ];
    

    如果您对 javascript 中的数组和对象之间的区别感到困惑,请尝试这里:

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object

    【讨论】:

    • 感谢您的快速回复。但我不想在声明时填充我的数据。我只想用数据类型声明,稍后会动态填充。让我知道这种可能性。
    • 我的最终目标是,我得到了前面提到的 json 格式的响应,我想将它存储到 mongoDb
    • Javascript 并没有真正做这种事情——它不是一种静态类型的语言,所以你不需要提前定义你的数据结构(你可以,但这并不是通常做的事情)。它使用“鸭子”类型 - 换句话说,如果您的对象具有用于特定目的的必要字段,那么它具有用于该目的的正确类型。
    • 所以你不需要提前知道你在 JSON 中接收到的结构 - 你可以做“var data = JSON.stringify(incomingJSON);”。如果您想在那之后验证该数据,您可以 - 但它并不是真正的 javascript 的一部分。
    • 希望这能给你足够的想法来取得一些进展。如果没有,请显示更多您的实际代码,我可能会给您更多指导。
    猜你喜欢
    • 2012-10-27
    • 2020-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    相关资源
    最近更新 更多