【问题标题】:How to parse variables to JSON Object (Javascript)如何将变量解析为 JSON 对象(Javascript)
【发布时间】:2015-12-24 18:26:47
【问题描述】:

我希望能够将外部变量解析为 JSON 对象。

这样的事情会做:

var username = "zvincze";

并使用该变量来解析 JSON 对象:

var json = '{"username":"VARIABLE_GOES_HERE"}'
var obj = JSON.parse(json);

这是一个非常简单的问题,我似乎无法弄清楚。事实上,我什至不知道是否有办法真正实现这样的目标。

【问题讨论】:

    标签: javascript json variables


    【解决方案1】:

    我觉得你在做的有点奇怪。根据定义,您创建的对象是 json(JavaScript Object Notation)。

    var obj = {};
    obj.username = "zvincze";
    
    //obj is now json
    var str = JSON.stringify(obj);
    //str == {'username':'zvincze'}
    

    JSON.parse(obj) 应该会失败,因为 obj 已经是 json。

    【讨论】:

    • OP 不想在基于字符的数据表示(字符串)的意义上创建 JSON;他显然只是想创建一个 JS 对象,他可以通过{username: username} 来完成。
    • 我无法理解“obj 现在是 json”是什么意思。它不是 JSON;它是一个普通的旧 JavaScript 对象,如果需要,可以将其字符串化为 JSON 字符串(但这似乎不是 OP 的意图)。
    • 那么,如果 obj 不是 JSON(如您所说),那么为什么 JSON.stringfy(obj) 可以工作?
    • JSON.stringify 不对 JSON 进行操作。它对常规 JavaScript 对象进行操作,并将它们转换为 JSON。
    • JSON 是一个字符串。来自 json.org:JSON 是一种文本格式。
    【解决方案2】:

    您需要仔细区分 JSON 和 JavaScript 对象。它们是完全不同的两件事。

    JSON 是一种独立于语言、基于字符的数据表示,用于数据交换。例如,如果您要向服务器发送数据,它需要采用字符串形式,因此您需要将数据转换为 JSON。如果您从服务器接收数据,并且它是 JSON 格式,则需要将其转换为 JavaScript 对象,以便在您的 JavaScript 程序中使用它。

    JSON 实际上与 JavaScript 无关。例如,JSON 可以用作 Java 程序交换数据的基于字符串的数据表示。 Java 和几乎所有其他语言都提供了自己的库例程,用于将其原生数据转换为 JSON,反之亦然。

    JSON 和 JavaScript 中使用的 JavaScript 对象之间的唯一关系是 JSON 字符串 看起来 很像 JavaScript 对象字面量,但有一些额外的限制,例如键必须被引用,它不能保存某些数据类型,例如函数,并且它不能保存循环引用。

    “JSON”中的“JS”部分并不表示 JSON 是一种基本的 JavaScript 数据结构,也不表示 JSON 在 JavaScript 中用于表示或操作数据。这仅仅是因为,如上所述,JSON 字符串的格式松散地模仿 JavaScript 对象文字的格式。

    在普通的日常 JavaScript 编程中,您永远不会使用 JSON,也无需担心它。正如我所说,当您将数据发送到某个地方或从某个地方接收数据时,您将需要担心 JSON,only 需要 JSON 作为数据格式。当然,在进行 ajax 调用时就是这种情况,但实际上,即使那样,如果你告诉它正确的类型,jQuery 的 $.ajax 会自动将数据与 JavaScript 对象相互转换,即使在这种情况下你通常也不需要担心 JSON。

    请注意,JSON 可以表示原始值,而不仅仅是 JavaScript 对象。例如,"1" 是代表数字 1 的有效 JSON。

    据我了解您的问题,您想创建一个 JavaScript 对象(不是 JSON),其中包含变量 username 的值作为其值之一。在这种情况下,您使用常规的旧 JavaScript 对象文字格式创建一个 JavaScript 对象

    {username: username}
    

    这意味着,创建一个对象,具有一个名为 "username" 的单个键(如果你愿意,请引用它),其值是变量 username 的值。同样,除非您打算将此对象发送到需要 JSON 字符串表示的地方,否则在这种情况下甚至不需要考虑 JSON。

    理论上,是的,正如一个答案所建议的那样,您可以使用'{"username":"' + VARIABLE_GOES_HERE + '"}' 之类的字符串算术创建一个值为username“插值”的JSON 字符串,然后使用@ 将该JSON 字符串转换为JavaScript 对象987654329@。但是,当您可以简单地将 JavaScript 对象编写为普通的 JavaScript 对象字面量时,绝对没有理由跳过这些环节。

    另一个答案显示了一种定义常规 JavaScript 对象的方法,然后使用 JSON.stringify 将其转换为 JSON。但是,在您的情况下,除非您打算将对象发送到某个地方,否则无需执行此操作。

    另一个答案显示了一种定义常规 JavaScript 对象的方法,然后将其字符串化为 JSON 字符串,然后立即将其解析回 JavaScript 对象,该对象与您在字符串化和解析之前开始使用的对象完全相同。完全没有必要这样做。

    人们看到不少关于 SO 试图以某种方式在 JSON 中操作、搜索或替换的问题,例如使用正则表达式。几乎没有任何情况下您甚至需要考虑做这样的事情。 JSON 有两个基本操作:将值转换为 JSON,以及将 JSON 转换为值。这两者都以JSON.stringify 和JSON.parse 的形式内置于语言中,它们以绝对的可靠性和性能完成它们的工作。如果出于某种原因您需要修改 JSON 字符串格式的数据,请不要操作该字符串;您需要做的就是将其解析为 JavaScript 值,操作该值,然后将其转换回 JSON。

    不幸的是,由于未知原因,许多正在学习该语言的 JavaScript 程序员,包括许多在 SO 上发布问题的人,都产生了 JSON 是 JavaScript 对象的误解,或者他们必须考虑 JSON 以及字符串化和解析以处理普通的旧 JavaScript 对象,这在很大程度上是不是的。

    次要问题,但您在问题中使用了“解析”一词。我看到越来越多的人出于某种原因使用这个词来表示“访问”或“检索”或“提取”。实际上,“解析”有一个非常具体的含义:将基于字符串的信息表示(例如程序或数据对象),根据特定的语法分析成某种合适的计算机友好形式以供进一步处理。 JSON.parse 所做的是在这个意义上进行解析,因为它正在根据 JSON 语法将基于字符串的信息表示分析成 JavaScript 对象以供进一步处理。

    【讨论】:

      【解决方案3】:

      var json = JSON.stringify({username:"zvincze"})

      【讨论】:

        【解决方案4】:

        您可以像下面这样简单地连接字符串...

        var json = '{"username":"' + VARIABLE_GOES_HERE + '"}'
        

        在你的情况下:

        var username = "zvincze";  
        var json = '{"username":"' + username + '"}';
        

        编码愉快....

        【讨论】:

        • 有人能解释一下为什么我的答案被否决了吗?下次做的时候请留下解释。是因为问题被否决了吗?我不知道SO里有这样的规则。
        【解决方案5】:

        不搞乱连接var json = '{"username":"'+ userName +'"}'你可以:

        var ob = {};              // or simply: var ob = {username:"zvincze"};
        ob.surname = "Zvincze";
        ob.name    = "Zachary";
        ob.id      = "5182842";
        
        var json = JSON.stringify(ob);
        var obj = JSON.parse(json);
        

        https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse
        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-02
          • 1970-01-01
          • 2017-03-18
          • 2017-03-24
          • 2020-01-08
          • 2020-06-16
          相关资源
          最近更新 更多