【问题标题】:How to create JSON string in JavaScript?如何在 JavaScript 中创建 JSON 字符串?
【发布时间】:2012-01-22 18:57:27
【问题描述】:
window.onload = function(){
    var obj = '{
            "name" : "Raj",
            "age"  : 32,
            "married" : false
            }';

    var val = eval('(' + obj + ')');
    alert( "name : " + val.name + "\n" +
           "age  : " + val.age  + "\n" +
           "married : " + val.married );

}

在这样的代码中,我试图创建 JSON 字符串只是为了玩。它会抛出错误,但如果我将所有姓名、年龄、已婚信息放在一行(第 2 行)中,则不会。有什么问题?

【问题讨论】:

标签: javascript json


【解决方案1】:

我的做法是:

   var obj = new Object();
   obj.name = "Raj";
   obj.age  = 32;
   obj.married = false;
   var jsonString= JSON.stringify(obj);

我想这样可以减少出错的机会。

【讨论】:

  • 如果你想给树增加深度,代码会是什么样子?就像名字一样,我想给出 name.firstname 和 name.lastname。我需要将名称定义为 var 吗?
【解决方案2】:

免责声明:这不是关于如何在 JavaScript 本身中创建 JSON 的最佳方法的答案。这个答案主要解决“问题是什么?”的问题。或者为什么上面的代码不起作用 - 这是 JavaScript 中错误的字符串连接尝试,并且没有解决为什么字符串连接首先是创建 JSON 字符串的一种非常糟糕的方式。

查看此处了解创建 JSON 的最佳方式:https://stackoverflow.com/a/13488998/1127761

阅读此答案以了解为什么上面的代码示例不起作用。

Javascript 不处理多行字符串。

您需要连接这些:

var obj = '{'
       +'"name" : "Raj",'
       +'"age"  : 32,'
       +'"married" : false'
       +'}';

您还可以在 ES6 及更高版本中使用模板文字:(See here for the documentation)

var obj = `{
           "name" : "Raj",
           "age" : 32,
           "married" : false,
           }`;

【讨论】:

  • 或者在文字的每一行末尾加一个\。
  • 对于多行字符串,可以使用`(反引号字符。在#1 键的左侧)来代替单引号或双引号。这些被称为“模板文字”。
  • 肯定的:不要满足于这个答案,看看其他人。
  • 模板文字是 ECMA Script 2015 标准。这个问题和答案已经从 2012 年开始了。但我会在 :) 中编辑它
  • 真的吗?从头开始字符串连接是构建 JSON 的最佳方式吗?我认为另一个答案应该是公认的答案。
【解决方案3】:

函数 JSON.stringify 会将你的 json 对象变成一个字符串:

var jsonAsString = JSON.stringify(obj);

如果浏览器没有实现它(IE6/IE7),请使用JSON2.js 脚本。它是安全的,因为它使用本地实现(如果存在)。

【讨论】:

    【解决方案4】:

    这很容易和简单

    var obj = new Object();
    obj.name = "Raj";
    obj.age = 32;
    obj.married = false;
    
    //convert object to json string
    var string = JSON.stringify(obj);
    
    //convert string to Json Object
    console.log(JSON.parse(string)); // this is your requirement.
    

    【讨论】:

      【解决方案5】:

      使用JSON.stringify:

      > JSON.stringify({ asd: 'bla' });
      '{"asd":"bla"}'
      

      【讨论】:

      • 如果您需要支持旧版浏览器,另请参阅json2.js
      • 是的,这是他的 GitHub 项目列表的链接:github.com/douglascrockford
      • @nepsdotin Douglas 在 SO 不是 Douglas Crockford,“致他的 GitHub”
      • 啊,错过了,不,不是 Crockford!
      【解决方案6】:

      我认为这种方式可以帮助你...

      var name=[];
      var age=[];
      name.push('sulfikar');
      age.push('24');
      var ent={};
      for(var i=0;i<name.length;i++)
      {
      ent.name=name[i];
      ent.age=age[i];
      }
      JSON.Stringify(ent);
      

      【讨论】:

        【解决方案7】:

        json 字符串中不能有换行符。你必须把它全部写成一行:{"key":"val","key2":"val2",etc....}

        但不要自己生成 JSON 字符串。有很多库可以为你做这件事,其中最大的是 jquery

        【讨论】:

        • JSON 可以有换行符,但 JavaScript 字符串文字语法不能。
        • 在字符串内部,是的,但不在键/值对之间。
        • 我认为您混淆了不能包含未转义换行符的 JavaScript 字符串文字语法和 JSON 标记。 JSON 标记当然可以包含换行符。
        • ...将您问题中的代码粘贴到jsonlint.com (当然不带等...)。单击验证后,您会看到它在漂亮打印时实际上 插入 换行符。
        猜你喜欢
        • 2010-11-06
        • 1970-01-01
        • 2015-03-10
        • 1970-01-01
        • 1970-01-01
        • 2013-03-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多