簡體   English   中英

如何將 js object 寫入 json 文件

[英]How to write an js object into a json-file

現在我想這樣寫:

myJSON表

在 JSON 文件中,我有以下方法:

    fs.writeFile('./users.json', JSON.stringify(myJSONtable, null, 4), 'utf-8', function (err) {
        if (err) throw err
        console.log('Done!')
    })

我不得不說我不確定“fs.writeFile”是否是正確的方法。

我的 Json 文件應如下所示:

{
    "Startordner": [
        "C:/GIT/Aktuell/zipper/startordner/"
    ],
    "Speicherorte": [
        "C:/GIT/Aktuell/zipper/zielordner/"
    ],
    "Ignore": [
        "STM32F030RC",
        "Dateinamensliste"
    ],
    "Satz": [
        {
            "Ursprungsdateien": "placeholder1",
            "NeuerName": "placeholder1",
            "Revision": "05"
        },
        {
            "Ursprungsdateien": "placeholder2",
            "NeuerName": "placeholder2",
            "Revision": "04"
        },
        {
            "Ursprungsdateien": "placeholder3",
            "NeuerName": "placeholder3",
            "Revision": "02"
        },
        {
            "Ursprungsdateien": "placeholder4",
            "NeuerName": "placeholder4",
            "Revision": "02"
        }
    ]
}

但我只在這里得到這個:

[]

myJSONtable 看起來像這樣:

[Startordner: Array(1), Zielordner: Array(1), Ignore: Array(1), Satz: Array(12)]
Ignore: Array(1)
0: {Ignore: Array(2)}
length: 1
__proto__: Array(0)
Satz: Array(12)
0: {Ursprungsdateien: "placeholder1"}
1: {NeuerName: "placeholder1"}
2: {Revision: "05"}
3: {Ursprungsdateien: "placeholder2"}
4: {NeuerName: "placeholder2"}
5: {Revision: "04"}
6: {Ursprungsdateien: "placeholder3"}
7: {NeuerName: "placeholder3"}
8: {Revision: "02"}
9: {Ursprungsdateien: "placeholder4"}
10: {NeuerName: "placeholder4"}
11: {Revision: "02"}
length: 12
__proto__: Array(0)
Startordner: [{…}]
Zielordner: Array(1)
0: {Zielordner: Array(1)}
length: 1
__proto__: Array(0)
length: 0
__proto__: Array(0)

我仍然可以得到幫助,在此先感謝。

myJSONtable 變量很可能是帶有 class 和getters項的數組。 它們在 JSON.stringify() output 中不可見。

您可以在該 class 中編寫自己的序列化方法,您將在其中手動返回 object ,其中手動調用每個字段的值或使用一些專用庫,如class-transformer

import { classToPlain, Expose } from "class-transformer";

class Satz {
  constructor(ursprungsdateien, neuerName, revision) {
    this.ursprungsdateien = ursprungsdateien;
    this.neuerName = neuerName;
    this.revision = revision;
  }
}

const item1 = new Satz("placeholder1", "placeholder1", "05");
const item2 = new Satz("placeholder2", "placeholder2", "06");

class SomeClass {
  @Expose()
  get startordner() {
    return "C:/GIT/Aktuell/zipper/startordner/";
  }

  @Expose()
  get speicherorte() {
    return "C:/GIT/Aktuell/zipper/zielordner/";
  }

  @Expose()
  get ignore() {
    return ["STM32F030RC", "Dateinamensliste"];
  }

  @Expose()
  get satz() {
    return [item1, item2];
  }
}

const someClass = [new SomeClass()];

// this returns only [{}]
console.log(JSON.stringify(someClass, null, 4));

const someClassPlain = classToPlain(someClass);

// this returns all getters
console.log(JSON.stringify(someClassPlain, null, 4));

默認情況下,庫會忽略 getter,但您可以使用 Expose 裝飾器強制它們在序列化后可見。 如果你不能在你的項目中使用裝飾器,回退總是編寫你自己的序列化方法。

這是 stackblitz 鏈接: https://stackblitz.com/edit/stackoverflow-66238400?file=index.js

我在別處尋找解決方案並找到了它。 我的問題只是我填充了一個數組,解決方案非常簡單,我只需要填充一個 object ,為此我只是將聲明 dof myJSONtable 更改為。

var myJSONtable = {};

盡管如此,還是感謝您的幫助。 抱歉打擾了,我希望其他人可以解決我的問題和以下答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM