Bagaimana saya bisa mencetak JSON dengan cukup menggunakan node.js?


436

Ini sepertinya masalah yang sudah dipecahkan, tetapi saya tidak dapat menemukan solusi untuk itu.

Pada dasarnya, saya membaca file JSON, mengubah kunci, dan menulis kembali JSON baru ke file yang sama. Semua berfungsi, tapi saya kehilangan format JSON. Jadi, alih-alih:

{
  name:'test',
  version:'1.0'
}

saya mendapat

{name:'test',version:'1.1'}

Apakah ada cara di Node.js untuk menulis JSON yang diformat dengan baik ke file?


JSON.stringifytersedak objek siklik, dan util.inspecttidak menghasilkan json yang valid. : \ Saya tidak menemukan solusi [asli] untuk mencetak JSON cantik di NodeJS
ThorSummoner

@ Tumormoner: Itu masalah dengan JSON, bukan dengan Node — JSON tidak mendukung referensi siklik. Ada solusi di sini, dalam pertanyaan lain .
Sasha Chedygov

Jawaban:


816

JSON.stringifyParameter ketiga mendefinisikan penyisipan white-space untuk pencetakan cantik. Ini bisa berupa string atau angka (jumlah spasi). Node dapat menulis ke sistem file Anda dengan fs. Contoh:

var fs = require('fs');

fs.writeFile('test.json', JSON.stringify({ a:1, b:2, c:3 }, null, 4));
/* test.json:
{
     "a": 1,
     "b": 2,
     "c": 3,
}
*/

Lihat dokumen JSON.stringify () di MDN , Node fs docs


1
Catatan: alih-alih 4, gunakan "\t"jika Anda ingin tab.
Jeremy Thille

Di nodejs terbaru Anda perlu menyediakan fungsi callback sebagai parameter ketiga, lihat jawaban ini: stackoverflow.com/a/11677276/675065
Alp

216

Saya pikir ini mungkin berguna ... Saya suka kode contoh :)

var fs = require('fs');

var myData = {
  name:'test',
  version:'1.0'
}

var outputFilename = '/tmp/my.json';

fs.writeFile(outputFilename, JSON.stringify(myData, null, 4), function(err) {
    if(err) {
      console.log(err);
    } else {
      console.log("JSON saved to " + outputFilename);
    }
}); 

4
Pastikan tmpfolder itu ada atau ini mungkin gagal.
Larry Battle

2
di sebagian besar sistem unix (termasuk Mac & Linux..dan jika saya ingat BSD), tmpfolder ada secara default
Antony

apa lokasi (Output nama file) yang akan diberikan dalam kasus windows
Devrath

Saya tidak tahu mengapa file saya tidak dapat ditulis (hanya dibuka kosong) tanpa panggilan balik ... Atau mungkin async, dan tidak berfungsi karena saya memiliki pengecualian yang dilemparkan saat startup aplikasi?
Tomasz Gandor

1
Terima kasih, ini banyak membantu saya.
Suraj Jain

83

Jika Anda hanya ingin mencetak objek dengan cantik dan tidak mengekspornya sebagai JSON yang valid, Anda dapat menggunakannya console.dir().

Ini menggunakan penyorotan sintaks, indentasi pintar, menghilangkan tanda kutip dari kunci dan hanya membuat output secantik yang didapatnya.

const jsonString = `{"name":"John","color":"green",
                     "smoker":false,"id":7,"city":"Berlin"}`
const object = JSON.parse(jsonString)

console.dir(object, {depth: null, colors: true})

Tangkapan layar objek yang dicatat

Di bawah tenda itu adalah jalan pintas untuk console.log(util.inspect(…)). Satu-satunya perbedaan adalah ia mem-bypass inspect()fungsi kustom apa pun yang didefinisikan pada objek.


8
console.dir tidak menghasilkan json yang valid.
Gregg Lind

1
@ GreggLind Mengklarifikasi bahwa dalam jawabannya!
adius

Ini membuat kios server ekspres saya. Saya tidak tahu mengapa :(
Sanket Berde

34

Jika Anda tidak ingin menyimpan ini di mana pun, tetapi hanya melihat objek untuk tujuan debugging.

console.log(JSON.stringify(object, null, "  "));

Anda dapat mengubah parameter ketiga untuk menyesuaikan indentasi.


1
Saya sudah mencari solusi ini - seperti selamanya! Param terakhir berfungsi seperti pesona!
vt2424253

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.