【问题标题】:How to stringify circular JSON object and save it to file?如何对循环 JSON 对象进行字符串化并将其保存到文件中?
【发布时间】:2015-03-09 15:50:45
【问题描述】:

我正在使用 d3.js 和 jquery 在 javascript 中绘制径向树图。我使用 json 文件将数据加载到 javascript var 中。在处理图表并进行一些更改后,例如更改某些节点的父节点,我想对数据进行字符串化并保存为 json 文件。当我对包含所有 json 数据的 treeData 变量进行字符串化并想要显示它时,我只收到字符串化的根节点。这是我的代码:

var json = JSON.stringify(treeData.children, function(key,value){
    if(key == "children"){
        return undefined;
    }
    return value;
});
alert("Json: " + json);

我也不知道为什么键设置为“儿童”。 我的 JSON 文件结构:

{
 "name": "root",
 "children": [
  {
   "name": "child1",
   "children": [ ... ]
  }
 ]
}

【问题讨论】:

  • 您在序列化对象时特别排除了children 属性,您如何期望结果只是没有children 属性的根节点?
  • 你是对的。 js var中的对象结构和我加载的json文件不一样。我只是将“孩子”更改为“父母”并且它工作正常。前一刻我读到了你的答案,但谢谢!

标签: javascript jquery json d3.js stringify


【解决方案1】:

循环 JSON 对象可以通过以下方法进行字符串化和保存:

import stringify from 'json-stringify-safe';
import fs from 'fs';

const content = stringify(myCircularJSONObject);

fs.writeFile('./data.json', content, ()=>{console.log('CREATED')});

【讨论】:

  • 孤独,通常最好的礼仪是在代码示例中添加文本 - 解释你试图提出的解决方案是什么。您的代码与原始问题有什么不同?你建议什么方法?这样的事情将帮助您获得更容易被他人接受的更好答案。
  • 你说得对,我已经更新了我的答案。接受的答案没有提供解决方案,但有一个。
【解决方案2】:

问题是使用树数据会返回一个循环和循环数据错误。将键从“children”切换到“parent”会给出一个不引用父母的 json 并且可以正常工作。

【讨论】:

    【解决方案3】:

    如果我理解正确,您正在尝试对结构化为的对象进行字符串化:

    var obj = {};
    obj.circle = obj;
    var str = JSON.stringify(obj);
    // → Error
    

    此对象将返回 JSON.stringify 错误,尽管其他方面是有效的。 如果你不介意字符串化对象的可读性,我建议使用CircularJSON:

    使用 Node.js 时安装:

    npm install --save circular-json
    

    为网络安装:

    <script src="build/circular-json.js"></script>
    

    及用法:

    var object = {};
    object.arr = [
        object, object
    ];
    object.arr.push(object.arr);
    object.obj = object;
    
    var serialized = CircularJSON.stringify(object);
    // → '{"arr":["~","~","~arr"],"obj":"~"}'
    
    var unserialized = CircularJSON.parse(serialized);
    // → { arr: [ [Circular], [Circular] ], obj: [Circular] }
    

    【讨论】:

      【解决方案4】:

      您的对象字面量中有一个 children 键,因此它被传递给 callBack,然后由于某种原因您返回 undefined,这将从结果中删除该键。

      【讨论】:

        猜你喜欢
        • 2018-01-25
        • 2017-12-23
        • 2015-01-14
        • 1970-01-01
        • 2019-01-03
        • 2012-07-17
        • 1970-01-01
        • 2011-05-06
        相关资源
        最近更新 更多