【问题标题】:Attach JSON key, value pairs to a javascript object将 JSON 键、值对附加到 javascript 对象
【发布时间】:2014-08-18 23:47:25
【问题描述】:

如果我有一些 JSON:

{
  "foo":"1",
  "bar":"2"
}

是否可以将其动态附加到 javascript 对象?例如,我可以有一个函数:

myObject.eatJSON(data)

这将允许我做类似的事情:

myObject.foo // "1"
myObject.bar // "2"

编辑

JSON 现在是 JSON。我愚蠢地把“数据=”放在它前面。相信我,它是外部 JSON。

【问题讨论】:

  • 试试 data.foo 或 data.bar
  • 你已经在声明一个 JS 对象了。
  • 您的代码创建了具有两个属性的 JavaScript 对象 data。你不需要解析任何东西。

标签: javascript json object


【解决方案1】:

大多数库都为此内置了一些功能。例如,在 underscore.js 中,我会使用 extend:

_.extend(myObject, data);

顺便说一句,data 不是 JSON;它是一个 Javascript 对象。如果整个内容是一个字符串,它只会是 JSON,例如:

data = "{\"foo\":\"1\", \"bar\":\"2\"}"

【讨论】:

    【解决方案2】:

    试试这个:

    var dataObj = JSON.parse(data)
    for (var key in dataObj)
      myObject[key] = dataObj[key]
    

    【讨论】:

    • 这就是我的意思,但是一个对象怎么能对自己执行这个动作呢?
    • 你可以写一个稍微类似的方法(使用this而不是myObject)并附加到一个原型,例如Hungry.prototype.eatJSON = function(data),然后所有从Hungry原型继承的对象都可以吃JSON。但是问问自己这个问题:这是否比只接受两个参数(obj 和数据)并做同样事情的独立函数更好?这是 JavaScript,拥抱函数!
    【解决方案3】:

    您可以通过执行以下操作将 JSON 文件中的属性附加到对象:

    class Foo
      constructor: ->
        data = JSON.parse './path/to.json'
    
        for key, value of data
          this[key] = value
    

    (带咖啡脚本)。现在,如果我的 JSON 看起来像这样:

    {
      "foo":"1"
      "bar":"2"
    }
    

    “Foo”对象会这样做:

    obj = new Foo
    obj.foo // "1"
    obj.bar // "2"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-24
      • 2020-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多