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?

Rajat
sumber
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

Ricardo Tomasi
sumber
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);
    }
}); 
nym
sumber
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.

adius
sumber
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.

Sanket Berde
sumber
1
Saya sudah mencari solusi ini - seperti selamanya! Param terakhir berfungsi seperti pesona!
vt2424253
11

bagaimana dengan ini?

console.table(object)

Sampel

Panuwat Kulcharatyothin
sumber