【问题标题】:Stringifying an object with nested arrays of objects in Javascript在Javascript中使用嵌套的对象数组对对象进行字符串化
【发布时间】:2018-09-14 10:33:02
【问题描述】:
JSON=new Object();JSON.stringify=function(e){var e=e;var c={}.hasOwnProperty?true:false;var d=function(i){return i<10?"0"+i:i};var a={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};function b(i){if(/["\\\x00-\x1f]/.test(i)){return'"'+i.replace(/([\x00-\x1f\\"])/g,function(k,j){var l=a[j];if(l){return l}return j})+'"'}return'"'+i+'"'}function f(q){var m=["["],j,p,k=q.length,n;for(p=0;p<k;p+=1){n=q[p];switch(typeof n){case"undefined":case"function":case"unknown":break;default:if(j){m.push(",")}m.push(n==null?"null":JSON.parse(n));j=true}}m.push("]");return m.join("")}function h(i){return'"'+i.getFullYear()+"-"+d(i.getMonth()+1)+"-"+d(i.getDate())+"T"+d(i.getHours())+":"+d(i.getMinutes())+":"+d(i.getSeconds())+'"'}function g(n){if(typeof n=="undefined"||n===null){return"null"}else{if(n instanceof Date){return h(n)}else{if(typeof n=="string"){return b(n)}else{if(typeof n=="number"){return isFinite(n)?String(n):"null"}else{if(typeof n=="boolean"){return String(n)}else{if(n instanceof Array){return f(n)}else{var k=["{"],j,m,l;for(m in n){l=n[m];switch(typeof l){case"undefined":case"function":case"unknown":break;default:if(j){k.push(",")}k.push(g(m),":",l===null?"null":g(l));j=true}}k.push("}");return k.join("")}}}}}}}return g(e)};JSON.parse=function(json){return eval("("+json+")")};

        var myUserObject = {
                    "name": "John Doe",
                    "company": "Oracle",
                    "twitter" : "@johndoe",      
                  };


        myNewObject['users']=[];
        myNewObject['users'].push(myUserObject);

    alert(myNewObject.users[0].name)



var myFile = new File ("~/Desktop/test.json");

    if(myFile.open("w")){
        myFile.encoding = "UTF-8";
        myFile.write(JSON.stringify(myNewObject, undefined, "\r\n"));
        myFile.close();

        }

我正在尝试将一个对象添加到一个对象数组中并对该对象进行字符串化。当我将一个对象推入另一个对象时,我可以通过警报正确访问数据,但是当我通过 stringify 将对象写入文件时,文件为空。

【问题讨论】:

  • JSON=new Object(); 将覆盖本机 JSON 对象,并且下一个命令 JSON.stringify() 将失败,因为新对象没有 stringify() 方法。你为什么要这样做?
  • 如果我改变:myFile.write(JSON.stringify(myNewObject, undefined, "\r\n"));为此: myFile.write(JSON.stringify(myUserObject, undefined, "\r\n"));对象已正确字符串化。只有当我尝试将对象推送到数组中时,我才会在 main 上收到错误
  • 你不应该覆盖对象.. :S 尝试使用原生的 ^^

标签: javascript stringify


【解决方案1】:

您对 how to use JSON 的理解以及如何(一般而言)引用对象是这里的问题。

您的新对象不应分配给JSON,因为JSON 是本机对象。您这样做会清除该对象引用。

即使您没有清除对本机 JSON 对象的引用,JSON.stringify 也是一种方法,并且应该将您想要字符串化的内容作为参数传递给它。您不为其分配功能,因为这会清除已存储在那里的功能。

console.log(JSON.stringify);  // The native object is ready to go
JSON = new Object();          // This wipes out your reference to the object
console.log(JSON.stringify);  // Now, the method doesn't exist!

只需将您需要字符串化的对象分配给一个变量并将其传递给JSON.stringify()

var myNewObject = {key1:true, key2:17, key3: [
  {k1: 10, k2:true, k3: "test" },
  {k1: 11, k2:true, k3: "testing" },
  {k1: false, k2:42, k3: "foo" },
]}; // Your object that needs stringification

var stringifiedObject = JSON.stringify(myNewObject);   // Stringify it!
console.log(stringifiedObject);                        // Done!

【讨论】:

  • 感谢斯科特的回复。我有一个快速跟进的问题,如果我想拥有 key3: be a array of multiple objects 我将如何让它字符串化?
  • @bhamlefty24 你根本没有做任何特别的事情。只需将主要对象传递给.stringify(),它将被完全字符串化。我将更新答案以显示这一点。
猜你喜欢
  • 1970-01-01
  • 2018-02-25
  • 2020-02-03
  • 1970-01-01
  • 2016-07-01
  • 2015-11-10
  • 1970-01-01
  • 1970-01-01
  • 2016-11-10
相关资源
最近更新 更多