Cetak beberapa JSON


74

Tantangan ini sangat mudah, tetapi mudah-mudahan, ada banyak jalan yang bisa Anda dekati:

Anda perlu mencetak / mengembalikan objek JSON yang valid minimal 15 karakter, tidak termasuk spasi kosong yang tidak perlu. Program Anda harus bekerja tanpa masukan apa pun.

Demi kejelasan, objek JSON dimulai dan diakhiri dengan kurung kurawal {}, dan berisi kunci nol atau lebih: pasangan nilai dipisahkan oleh koma. Spesifikasi JSON lengkap dapat ditemukan di json.org , dan output kode Anda harus melewati validator ini .

Karenanya, salah satu dari yang berikut ini tidak valid:

4                               //Too short, not an object
"really, really long string"    //A string, not an object
["an","array","of","values"]    //An array is not a JSON object
{"this":4      }                //You can't count unessential whitespace
{"1":1,"2":3}                   //Too short
{"a really long string"}        //Not valid JSON, it needs a value
{'single-quoted':3}             //JSON requires double-quotes for strings

Namun, yang berikut ini akan valid:

{"1":1,"2":2,"3":3,"4":4}       //Long enough
{"whitespace      ":4}          //This whitespace isn't unessential

Bahasa non-pemrograman diizinkan untuk tantangan ini. Anda dapat mengembalikan string dari suatu fungsi, atau mencetaknya. Ini adalah , jadi jawablah dengan kode sesedikit mungkin!


1
Saya suka berbagai jawaban untuk yang ini
Robert Fraser

Hmmmm, definisi Anda tentang JSON terbatas. Bagaimana dengan kode yang mengeluarkan JSON yang valid tetapi tidak menampilkan kurung kurawal?
Konijn

4
@Konijn seperti yang saya katakan, itu harus menjadi objek JSON yang valid . Objek didefinisikan oleh kurung kurawal.
Nathan Merrill

Mengerti, dengan stres pada objek;)
Konijn

1
@Masterzagh Sayangnya, objek JS asli tidak masuk hitungan. "Anda dapat mengembalikan string dari suatu fungsi, atau mencetaknya"
Nathan Merrill

Jawaban:


72

Python 2, 14 byte

print{`str`:1}

Output:

{"<type 'str'>": 1}

Backtick mendapatkan representasi string dalam Python 2. Biasanya, output di dalam ini menciptakan tanda kutip tunggal, yang Python mengakui sebagai membatasi string, tetapi JSON tidak. Tetapi Sp3000 mengamati bahwa ketika meringkas suatu tipe, deskripsi tipe sudah mengandung tanda kutip tunggal, yang memaksa tanda kutip luar menjadi tanda kutip ganda.


20
@ Sp3000 Sangat indah dengan cara yang mengerikan.
xnor

6
Dan saya pikir JS adalah satu-satunya bahasa yang Anda benar-benar dapat penyalahgunaan ketik casting ...
Downgoat

pendekatan yang sama berfungsi untuk py3 dengan 20 byteprint({repr(str):1})
dahrens

1
@dahrens untuk Py3: print({"'"*9:9})for 16 ( print{"'"*9:9}adalah 14 lainnya di Py2)
Jonathan Allan

37

jq, 6 karakter

(3 karakter kode + 3 opsi opsi baris perintah.)

env

CW karena saya yakin ini bukan jawaban yang Anda izinkan.

Contoh dijalankan:

bash-4.3$ jq -n 'env'
{
  "GIT_PS1_SHOWDIRTYSTATE": "1",
  "TERM": "xterm",
  "SHELL": "/bin/bash",
  "GIT_PS1_SHOWUNTRACKEDFILES": "1",
  "XTERM_LOCALE": "en_US.UTF-8",
  "XTERM_VERSION": "XTerm(322)",
  "GIT_PS1_SHOWSTASHSTATE": "1",
  "GIT_PS1_SHOWUPSTREAM": "auto",
  "_": "/usr/bin/jq"
}

(Output jelas diperpendek.)


6
Ini jelas merupakan pengajuan yang valid (dan tidak perlu ke CW)
Nathan Merrill


1
Ini dianggap sebagai pembongkaran solusi untuk built in, yang hampir merupakan celah terlarang. Kata kunci: hampir
John Dvorak

1
@ JanDvorak Tidak selalu ada celah, karena ada kasus di mana menarik untuk melihat built-in yang digunakan. Ini salah satunya.
Fengyang Wang

1
Saya tidak akan melakukannya melawan keinginan eksplisit Anda, tetapi saya setuju bahwa ini tidak boleh dilanggar. Juga, konsensus saat ini adalah bahwa bendera juru bahasa harus menghitung perbedaan antara doa dengan dan tanpa bendera, jadi -ndan akun ruang untuk tiga byte tambahan.
Dennis

31

Jelly , 11 byte

“Ɠɼ'ẸẠḌȷżÑ»

Cobalah online!

Keluaran

{"Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch":0}


1
Ini memiliki 6 konsonan berturut-turut dua kali ( pwllgwdan bwllll). Apa ini?
Steven H.

2
@ ETHproductions Tentu, tapi saya butuh setidaknya 9 surat untuk mematuhi batas. Semua kata dengan 6+ huruf ada di kamus panjang, jadi tidak masalah yang mana yang Anda pilih.
Dennis


8
Tunggu, Jelly punya built-in untuk ini ?
Buffer Over Baca

19

Notepad, 7 penekanan tombol

Jika Anda memiliki komputer Windows dengan program Notepad, ketikkan ini:

{"F5":0}

Di komputer Windows 7 saya, setidaknya, ini memberi Anda sesuatu seperti:

{"3:42 PM 10/25/2016":0}

1
@ kucing Ini adalah program, bukan bahasa pemrograman, tapi sekali lagi, saya percaya Vim sama.
ETHproduk

2
Yah, Vim adalah "bahasa" pemrograman, baik karena memenuhi aturan PPCG (bukan kelengkapan Turing) tetapi juga dalam kelengkapan Turing (setidaknya, saya cukup yakin)
cat

1
@cat saya mengerti. Saya tidak yakin apakah Notepad selesai Turing. Saya meragukannya, tapi mungkin; setelah semua, /// telah terbukti demikian, dan Notepad dapat dengan cukup baik menciptakan kembali fitur tunggal.
ETHproduk

1
Vim berbeda dari Notepad - Anda dapat menyimpan skrip dan menjalankannya di dalam editor. Tidak ada fitur seperti itu di Notepad. Dengan demikian, fitur-fitur di Notepad (pencarian-dan-ganti yang belum sempurna, penyalinan, dan tempel) yang memungkinkannya menjadi TC memerlukan dialog navigasi setiap kali - yang berarti lebih banyak penekanan tombol.
Mego

1
@ kucing Ya, maaf, maksud saya sudah diizinkan sejak diskusi kami.
ETHproduksi

15

Java (JDK 10) , 20 byte

v->"{\"\":"+1/.3+"}"

Cobalah online!

Keluaran

{"":3.3333333333333335}

3
Java adalah bahasa terakhir yang saya harapkan untuk overload +ke String.concat>: ^ (
kucing

3
@ kucing Ya, itu sebenarnya satu-satunya kelebihan yang ada. Masalahnya adalah itu bahkan tidak kelebihan String.concat! Jika Anda memeriksa bytecode, ini adalah apa yang mengkompilasi Java menjadi: ()->new StringBuilder("{\"\":").append(1/.3).append("}").toString(). Juga, jangan khawatir, ini masih merupakan jawaban terpanjang di halaman ini, batalkan Brainfuck dan Java 7. Jadi Jawa memegang pangkatnya;)
Olivier Grégoire

14

PHP, 14 13 byte

{"":<?=M_E?>}

Mencetak objek matematika yang bagus yang hampir bisa dibayangkan orang berguna :

{"":2.718281828459}

Menggunakan fakta bahwa php mencetak apa pun di luar tag kata demi kata untuk menghemat beberapa tanda kutip, M_Eadalah konstanta terpendek yang bisa saya temukan.

sunting: disimpan satu byte berkat Lynn. Sayangnya itu bukan lagi objek matematika yang 'bagus'.


""adalah kunci JSON yang valid.
Lynn

14

JavaScript, 17 15 byte

Terima kasih kepada @Neil untuk yang ini. Panggilan tanpa input.

_=>`{"${_}":0}`

Keluaran {"undefined":0}

Versi lama, 16 byte

Terima kasih kepada @ kamoroso94 untuk -1 pada versi ini

_=>`{"":${9e9}}`

Keluaran {"":9000000000}


Anda bisa mengubahnya menjadi fungsi panah untuk menghapus 4 byte.
DanTheMan

1
Bisakah Anda memiliki kunci kosong? (mis. hapus a)
Conor O'Brien

_=>`{"a":${_}}`menghasilkan {"a":undefined}, yang persis 15 karakter. Tercatat bahwa Anda tidak menggunakan input apa pun saat memanggil fungsi ini
Bassdrop Cumberwubwubwub

1
@BassdropCumberwubwubwub Secara kebetulan, kode Anda juga 15 karakter. Saya tidak yakin bahwa undefinedadalah nilai yang valid di JSON, tapi itu mudah diperbaiki dengan menjadikannya nama properti dan menggunakan nilai nol: _=>`{"${_}":0}`.
Neil

3
Hapus auntuk membuat kunci string kosong, kunci yang valid di JSON. 1 byte lebih sedikit.
kamoroso94

12

Brainfuck, 50 byte

+[+<---[>]>+<<+]>>+.>>>--.<+++<[->.<]>>.<+.-.<<++.

Keluaran {"999999999999999999999999999999999999999999999999999999999999999999999999999999999":9}. Mengasumsikan seorang juru bahasa yang memiliki sel 8-bit dan tidak terikat di sebelah kiri. Cobalah online!



10

Jolf, 9 byte

"{¦q:¦q}"

Output: {"{¦q:¦q}":"{¦q:¦q}"}. Coba di sini!

"{¦q:¦q}"
"{  :  }"  raw string
  ¦q       insert the source code here
     ¦q    and here

9

Pyth, 7 byte

.d],`G0

Membuat kamus yang berisi satu kunci "'abcdefghijklmnopqrstuvwxyz'"dan nilai 0:

.d         Dictionary from:
  ]         The single-element list containing:
   ,         The two-element list containing:
    `G        The representation of the alphabet (the key)
      0       and 0 (the value)
          Implicitly print the stringification of this.

9

Batch, 16 byte

Cetakan {"Windows_NT":0}.

@echo {"%OS%":0}

Bisakah Anda menambahkan (contoh) output?
grooveplex

8

///, 15 14 karakter

/a/{":1234}/aa

(Setidaknya output 1 2 karakter lebih panjang dari kode.)

Cobalah online!

Terimakasih untuk:

  • ETHproductions untuk menggunakan kembali pembatas objek sebagai bagian dari kunci (-1 karakter)

Contoh dijalankan:

bash-4.3$ slashes.pl <<< '/a/{":1234}/aa'
{":1234}{":1234}

Agar lebih mudah dibaca:

bash-4.3$ slashes.pl <<< '/a/{":1234}/aa' | jq ''
{
  ":1234}{": 1234
}

1
Itu cara cerdas untuk menghemat byte :-)
ETHproduk

2
Anda dapat menyimpan yang lain dengan /a/{":1234}/aa(keluaran {":1234}{":1234})
ETHproduk

Luar biasa, @ETHproductions. Terima kasih.
manatwork

7

R, 19 byte

cat('{"',lh,'":1}')

Menjadi sedikit lebih lama karena kebutuhan untuk melarikan diri dari kutipan \". Selain itu, lhadalah salah satu dataset bawaan Rdan (setahu saya) adalah objek dengan nama terpendek yang berisi 9 karakter yang diperlukan untuk mengisi panjang kunci. (sunting: ternyata berhasil pijuga dengan opsi standar dan saya dikalahkan oleh @JDL yang cukup pintar untuk melarikan diri menggunakan tanda kutip tunggal daripada backslash tambahan)

Deskripsi lhdalam dokumentasi-R adalah:

Rangkaian waktu yang teratur memberikan hormon luteinisasi dalam sampel darah dengan interval 10 menit dari wanita manusia, 48 sampel.

yang merupakan nama kunci yang agak tidak terduga, tapi hei, itu berfungsi dan menghasilkan output:

{" 2.4 2.4 2.4 2.2 2.1 1.5 2.3 2.3 2.5 2 1.9 1.7 2.2 1.8 3.2 3.2 2.7 2.2 2.2 1.9 1.9 1.8 2.7 3 2.3 2 2 2.9 2.9 2.7 2.7 2.3 2.6 2.4 1.8 1.7 1.5 1.4 2.1 3.3 3.5 3.5 3.1 2.6 2.1 3.4 3 2.9 ":1}

Jawabannya dapat dibandingkan dengan hanya menambahkan kunci dengan huruf "acak" untuk menghasilkan setidaknya 15 karakter (24 byte):

cat("{\"HeloWorld\":1}")

1
Anda dapat menghindari backslash yang melarikan diri dengan menggunakan tanda kutip tunggal dalam ekspresi R: cat('{"',lh,'":1}')seperti yang saya lakukan di atas (meskipun saya menggunakan pibukan lh). Dalam pencarian saya untuk variabel dua huruf saya menemukan fungsi elyang saya tidak pernah tahu ada. Bisa berguna di masa depan ...
JDL

7

PowerShell 22 20 14 Bytes

'{"":'+1tb+'}'

Keluaran

{"":1099511627776}

Menggunakan konstanta yang ditentukan untuk 1TB dalam byte untuk mencapai batas karakter dan nilai integer statis untuk membuat json yang valid. Terima kasih kepada TimmyD untuk mengurangi karakter dengan 5 dengan menghapus beberapa redundansi.


Sebelumnya Posting 40 Bytes

"{$((1..9|%{'"{0}":{0}'-f$_})-join",")}"

Keluaran

{"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9}

Mengambil array integer dan membuat pasangan kunci-nilai untuk masing-masing. Bergabunglah dengan koma dan bungkus dengan satu set kawat gigi keriting.


6

05AB1E , 9 byte

Sayangnya, 05AB1E tidak memiliki objek kamus sehingga kami harus membuatnya sendiri.

’{"èÖ":7}

Cobalah online!

Keluaran

{"dictionaries":7}

6

Retina, 11 byte

 
{"9$*R":1}

Keluaran

{"RRRRRRRRR":1}

Catatan: baris baru penting karena tidak ada yang diganti dengan output yang dihasilkan, saya telah menggunakan ruang tanpa putus untuk menggambarkan hal ini!

Cobalah online!


5

V , 9 byte

i{"¹*":0}

Cobalah online!

Sangat mudah. Memasuki mode penyisipan, memasuki teks berikut:

{"*********":0}

Alasan ini sangat singkat adalah karena ¹mengulangi karakter berikut sebanyak 9 kali.


Saya mengharapkan 0 byte satu: P
Maltysen

1
@ maltysen saya mempostingnya. Saya menghapusnya karena menggunakan tanda kutip tunggal dan bukan ganda ... :(
DJMcMayhem

5

JavaScript (ES6) + jQuery, 15 byte

Karena jQuery.

_=>`{"${$}":0}`

Output {"function (a,b){return new n.fn.init(a,b)}":0}saat dipanggil. Coba di sini:


1
Tugasnya adalah mengeluarkan sesuatu. tanpa alert()Anda tidak menghasilkan apa
nl-x

1
@ nl-x OP telah diedit untuk mengklarifikasi bahwa fungsi yang mengembalikan string diizinkan.
ETHproduk

5

Dyalog APL , 9 byte

JSONDMX

Cobalah online!

Di ruang kerja yang bersih di PC saya hasilnya adalah

{"Category":"","DM":[],"EM":"","EN":0,"ENX":0,"HelpURL":"","InternalLocation":["",0],"Message":"","OSError":[0,0,""],"Vendor":""}

⎕JSON konversikan ke JSON

⎕DMX objek (yang tersedia secara universal) D iagnostic M esage E x cenderung


4

brainfuck, 83 byte

--[-->+++++<]>.+[---->+<]>+++.>-[>+<-----]>.........<<.[----->+<]>.>.>--[-->+++<]>.

Keluaran {"333333333":3}

Kemungkinan ada solusi lain yang lebih pendek, tetapi saya belum menemukannya.

Penjelasan:

--[-->+++++<]>. {
+[---->+<]>+++. "
>-[>+<-----]>.  3
........
<<.             "
[----->+<]>.    :
>.              3
>--[-->+++<]>.  }

Cobalah online


4

PHP, 19 byte

<?='{"'.(9**9).'":1}';

Keluaran: {"387420489":1}

https://eval.in/665889

Berkat manatwork untuk tipsnya!


1
Output Anda adalah 16 karakter, sedangkan persyaratannya adalah 15. Jadi mengapa tidak menghapus “H” itu?
manatwork

BTW, karena PHP 5.6 ada **operator: pow(9,9)(9**9).
manatwork

1
15 karakter (bukan PHP):{"<?=9**9?>":1}
Loovjo

4

Java 7, 36 byte

String c(){return"{\"a\":"+1e6+"}";}

Java 8, 21 byte

()->"{\"a\":"+1e6+"}"

Tidak digabungkan & kode uji:

Coba di sini.

class M{
  static String c(){
    return "{\"a\":" + 1e6 + "}";
  }

  public static void main(String[] a){
    System.out.println(c());
  }
}

Output (panjang 15):

{"a":1000000.0}

Solusi kedua memberikan kesalahan
Numberknot

1
msgstr "panjang bervariasi antara 15 dan 16 tergantung pada hash". Hash secara teknis dapat memiliki panjang sekecil 1( lihatSystem.identityHashCode(Object) ).
Olivier Grégoire

1
Juga, Anda bisa bermain golf 1 byte dengan menggunakan ""sebagai kunci dan 1e7sebagai nilai. ""adalah kunci yang valid ketika dicoba di validator.
Olivier Grégoire

2
@ OlivierGrégoire Ok, saya akan menghapus thiskode. Adapun ""dengan 1e7, itu tidak akan berhasil sayangnya. 1e6output 1000000.0, tetapi 1e7output 1.0E7sebagai gantinya.
Kevin Cruijssen

1
Oh, kesalahan saya, saya tidak memeriksa.
Olivier Grégoire

4

R, 19 byte

Ini berfungsi di lokal Inggris Inggris; mungkin memerlukan +2 byte pada yang lain. (Edit: mungkin tidak --- lihat komentar.)

cat('{"',pi,'":1}')

Saya berharap untuk sesuatu yang pintar (mungkin memetik baris kode dari fungsi yang sudah ada seperti q) tetapi tidak dapat menemukan apa pun. Hasil:

{" 3.141593 ":1}

Perhatikan bahwa Anda tidak harus melarikan diri dari tanda kutip ganda dalam R jika Anda menggunakan tanda kutip tunggal untuk mengutip string (dan sebaliknya). Perilaku ini bergantung pada lokal. Saya akan berharap itu bekerja di lokal bahasa Inggris AS juga.

Ini juga mensyaratkan bahwa digitsopsi default Anda setidaknya enam (yang merupakan default pabrik-baru) dan itu scipensetidaknya -digits(default pabrik-baru adalah nol).


1
Maaf apa? Perubahan tata bahasa R dengan lokal?
kucing

Ya, karakter mana yang perlu melarikan diri tergantung pada options(quote)yang dapat ditentukan oleh pengguna, tetapi defaultnya, sejauh yang saya tahu, bergantung pada lokal.
JDL

@ kucing saya pikir itu salah paham. Keberadaan options('quote') tidak didokumentasikan , mengubahnya tidak memiliki efek yang dapat dilihat, dan meskipun saya telah menemukan banyak gangguan di RI keraguan bahwa opsi runtime akan mengubah cara itu diuraikan. Mungkin mengubah output tentu saja - tetapi tidak dalam kode dalam jawaban ini.
Konrad Rudolph

@ Konrad, Anda mungkin benar. Saya pikir saya sedang memikirkan "useFancyQuotes" yang hanya mempengaruhi quote, squotedll.
JDL


3

Elemen , 18 byte

\{\"a\"\:`9 9^`\}`

Cobalah online! Keluaran{"a":387420489}

Ini hanya tiga byte lebih pendek dari solusi naif. Bagian pertama dari output adalah hard-coded (terlalu banyak karakter escape untuk membuat pendekatan lain yang layak), sementara nilainya dihitung 9^9untuk membuat angka cukup lama.


3

Perl 5, 16 15 byte

Menggunakan cap waktu unix saat program dimulai sebagai konten objek satu elemen. Ini memberikan output yang valid jika Anda menjalankannya lebih dari 10:46:39 pada 3 Maret 1973 . Tetapi karena kita tidak dapat kembali ke masa yang tampaknya sah.

say"{\"$^T\":1}"

Menggunakan variabel FORMAT_TOP_HANDLE$^ yang defaultnya adalah STDOUT_TOP.

say"{\"$^\":1}";

Jalankan dengan -Ebendera tanpa biaya tambahan.

perl -E 'say"{\"$^\":1}";'

Outputnya panjangnya 16 byte.

{"STDOUT_TOP":1}

Jawaban tergantung waktu RIP :(
CalculatorFeline

@CalculatorFeline hu?
simbabque

3

Cheddar, 17 14 byte

Disimpan 3 byte berkat @ ConorO'Brien

->'{":1234}'*2

Fungsi anonim yang kembali {":1234}{":1234}, yang merupakan objek JSON yang valid:

{
  ":1234}{": 1234
}

Cobalah online!


3

Batch Windows, 10 byte

{"%OS%":5}

Variabel lingkungan OSberisi string Windows_NT(Di semua sistem operasi Windows sejak 2000, menurut pertanyaan ini di Stack Overflow)


@ETHproductions Ups
penalti

Apakah ini benar-benar menghasilkan sesuatu? Neil 's Batch jawaban pasti tidak, tapi tidak ingat tentang output apapun bets implisit.
manatwork

@manatwork Ya, karena gema dihidupkan, perintah saat ini digaungkan, mengevaluasi variabel OS dalam proses.
penalti

Oh Jadi sebenarnya ia mencoba mengeksekusi itu {"%OS%":5}karena itu akan menjadi perintah dan Anda mendapat manfaat dari fitur penelusuran dasar? Itu rumit.
manatwork

@manatwork Ya, tepatnya.
penalti

3

HQ9 +, 15 byte

{"Quineland":0}

Keluaran itu sendiri. Saya pikir jawaban 8 byte mungkin, seperti:

{":11QQ}

Output ini {":11QQ}{":11QQ}, yang merupakan JSON hampir valid, tetapi 11QQbukan nilai yang valid.

HQ9 + bukan bahasa pemrograman yang valid menurut standar PPCG, tetapi OP telah mengizinkan bahasa non-pemrograman.


1
Ini sama sekali tidak valid. Semua kiriman harus dalam bahasa pemrograman yang valid.
Mego

Ini sebagian besar kompleksitas kolmo (sebagian besar, karena jika mengeluarkan sesuatu yang berbeda itu masih diperhitungkan), jadi saya pikir ini bisa menjadi valid
Destructible Lemon

@DestructibleWatermelon Menggunakan bahasa non-pemrograman adalah celah standar .
Mego

@Mego OP telah secara eksplisit mengizinkan bahasa non-pemrograman sekarang
ETHproduksi
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.