Biraz JSON yazdır


74

Bu zorluk oldukça basittir, ancak umarım, yaklaşabileceğiniz birçok yol vardır:

Gereksiz boşlukları saymadan, en az 15 karakterden oluşan geçerli bir JSON nesnesi yazdırmanız / iade etmeniz gerekir . Programınız herhangi bir girdi olmadan çalışmalıdır.

Netlik açısından, bir JSON nesnesi küme parantezleri ile başlar ve biter {}ve sıfır veya daha fazla anahtar içerir: virgüllerle ayrılmış değer çiftleri. JSON belirtiminin tamamı json.org'da bulunabilir ve kodunuzun çıktısı bu doğrulayıcıyı geçmelidir .

Bu nedenle, aşağıdakilerden hiçbiri geçerli olmaz:

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

Ancak, aşağıdakiler geçerli olacaktır :

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

Programlamayan dillere bu zorlukla izin verilir. İşlevden bir dize döndürebilir veya yazdırabilirsiniz. Bu bir , bu yüzden mümkün olduğunca az kod ile cevap!


1
Bu konuda cevapların çeşitliliğini seviyorum
Robert Fraser

Hmmmm, JSON tanımınız sınırlıdır. Geçerli JSON'u çıkaran ancak kaşlı ayraçlar çıkarmayan kod ne durumda?
Konijn

4
Dediğim gibi @Konijn, geçerli bir JSON nesnesi olmalı . Nesne küme parantezleri ile tanımlanır.
Nathan Merrill

Anladım, nesneye vurgu yaparak;)
Konijn

1
@Masterzagh Ne yazık ki, yerel bir JS nesnesi sayılmaz. "İşlevden bir dize döndürebilir veya yazdırabilirsiniz"
Nathan Merrill

Yanıtlar:


72

Python 2,14 bayt

print{`str`:1}

Çıktılar:

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

Geri tepmeler Python 2'de dize temsili elde eder. Genellikle, bu çıktılar Python'un bir dize sınırlayıcı olarak tanıdığı tek tırnaklar oluşturur, ancak JSON bunu yapmaz. Ancak Sp3000, bir türü dizgeye sokarken, tür tanımının zaten dış tırnakları çift tırnak olmaya zorlayan tek tırnak işaretleri içerdiğini gözlemler.


20
@ Sp3000 Bu korkunç bir şekilde güzel.
xnor

6
Ben de JS'nin gerçekten rol türlerini kötüye kullanabileceğin tek dil olduğunu düşündüm ...
Downgoat

Aynı yaklaşım 20 bayt ile py3 için çalışıyorprint({repr(str):1})
dahrens

1
Py3 için @dahrens: print({"'"*9:9})16 için ( print{"'"*9:9}Py2'de başka 14 ise)
Jonathan Allan

37

jq, 6 karakter

(3 karakter kod + 3 karakter komut satırı seçeneği.)

env

CW çünkü bunun izin vermeyi düşündüğünüz bir cevap olmadığından eminim.

Örnek çalışma:

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"
}

(Çıktı açıkça kısaldı.)


6
Bu kesinlikle geçerli bir sunumdur (ve CW'ye gerek yoktur)
Nathan Merrill


1
Bu, çözümü neredeyse tamamen yasaklanmış bir boşluk olan bir yerleşik yapıya boşaltmak olarak sayılır. Anahtar kelime: neredeyse
John Dvorak

1
@JanDvorak Her zaman bir boşluk değildir, çünkü yerleşik olarak kullanılmasının ilginç olduğu durumlar vardır. Bu onlardan biri.
Fengyang Wang

1
Açık dileklerine karşı bunu yapmayacağım, ama bunun istenmeyen bir şey olması gerektiğine katılıyorum. Ayrıca, şu andaki fikir birliği , tercüman bayraklarının bayrakla ve bayrakla yapılan aşılama arasındaki farkı sayması gerektiği ve dolayısıyla -nüç fazladan bayt için bir boşluk olduğu anlamına gelir.
Dennis,

31

Jöle , 11 bayt

“Ɠɼ'ẸẠḌȷżÑ»

Çevrimiçi deneyin!

Çıktı

{"Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch":0}


1
İki kez üst üste 6 ünsüzleri vardır ( pwllgwve bwllll). Bu da ne?
Steven H.

2
@ETHproductions Elbette, ancak limite uymak için en az 9 harfe ihtiyacım var. 6+ harften oluşan tüm kelimeler uzun sözlüktedir, bu yüzden hangisini seçtiğiniz önemli değildir.
Dennis,


8
, Jöle bir dahili Bekle için bu ?
Tampon Aşırı Okuma

19

Not Defteri, 7 tuş vuruşları

Notepad programına sahip bir Windows bilgisayarınız varsa, şunu yazın:

{"F5":0}

Windows 7 bilgisayarımda, en azından, bu size şöyle bir şey verir:

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

1
@ Bu bir programlama dili değil, bir program ama yine de Vim'in aynı olduğuna inanıyorum.
ETHProductions,

2
Eh, Vim olan bir programlama "dil", hem de PPCG kuralları (Turing değil tamlık) değil, aynı zamanda Turing bütünlük içinde yerine getirmesi halinde (en azından ben eminim)
Kedi

1
@ cat görüyorum. Not Defteri Turing tamamlandı olup olmadığından emin değilim. Bundan şüpheliyim ama belki; Sonuçta, /// ispatlanmıştır ve Not Defteri tek özelliğini çok iyi yeniden oluşturabilir.
ETHProductions,

1
Vim, Not Defteri'nden farklıdır - bir komut dosyasını kaydedebilir ve düzenleyicide çalıştırabilirsiniz. Not Defteri'nde böyle bir özellik yoktur. Bu nedenle, Not Defteri'ndeki (ilkel arama ve değiştirme, kopyalama ve yapıştırma) TC olmasını sağlayan özellikler, her seferinde gezinme diyalogları gerektirir - bu, daha fazla tuşa basılması anlamına gelir.
Mego

1
@ cat Evet, üzgünüm, konuşmamızdan beri izin verildiğini kastettim.
ETHProductions

15

Java (JDK 10) , 20 bayt

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

Çevrimiçi deneyin!

Çıktı

{"":3.3333333333333335}

3
Java Ben aşırı beklenir son dildir +için String.concat^ (:>
cat

3
@ cat Evet, aslında var olan tek aşırı yük. Mesele şu ki aşırı yüklenmiyor String.concat! Eğer bayt kodu kontrol, bu Java içine derler şudur: ()->new StringBuilder("{\"\":").append(1/.3).append("}").toString(). Ayrıca, endişelenmeyin, bu sayfadaki en uzun cevap bu, Brainfuck olanı ve Java 7'yi. Yani Java rütbesini elinde tutuyor;)
Olivier Grégoire

14

PHP, 14 13 bayt

{"":<?=M_E?>}

Neredeyse faydalı olduğunu iddia edebileceği güzel bir matematik nesnesini yazdırır :

{"":2.718281828459}

PHP'nin tırnak işaretlerinden tasarruf etmek için etiketlerin dışındaki herhangi bir şeyi basması gerçeğini kullanır, M_Ebulabildiğim en kısa sabittir.

düzenleme: kaydedilmiş bir bayt Lynn sayesinde. Ne yazık ki artık 'iyi' bir matematiksel nesne değil.


""geçerli bir JSON anahtarıdır.
Lynn

14

JavaScript, 17 15 bayt

Bunun için @Neil'e teşekkürler. Giriş yapmadan arayın.

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

çıktılar {"undefined":0}

Eski versiyon, 16 bayt

Bu sürümde -1 için @ kamoroso94'e teşekkürler

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

çıktılar {"":9000000000}


4 baytı kaldırmak için bunu bir ok işlevine dönüştürebilirsiniz.
DanTheMan

1
Boş bir anahtarınız olabilir mi? (örn. kaldır a)
Conor O'Brien

_=>`{"a":${_}}`{"a":undefined}tam olarak 15 karakter olan sonuç . Bu işlevi çağırırken herhangi bir girdi kullanmadığınızı kaydetti
Bassdrop Cumberwubwubwub 25:16

1
@BassdropCumberwubwubwub Tesadüfen, kodunuz da 15 karakterdir. Ben emin değilim undefinedJSON geçerli bir değerdir, ama bu kolayca o özellik adını verme ve sıfır değerini kullanarak tamir edildi: _=>`{"${_}":0}`.
Neil

3
aAnahtarı boş dize yapmak için, JSON'da geçerli bir anahtar olarak kaldırın . 1 az bayt.
kamoroso94

12

Brainfuck, 50 bayt

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

Çıkışlar {"999999999999999999999999999999999999999999999999999999999999999999999999999999999":9}. 8 bit hücrelere sahip ve soldan sınırsız bir tercüman varsayar. Çevrimiçi deneyin!



10

Jolf, 9 bayt

"{¦q:¦q}"

Çıkışlar: {"{¦q:¦q}":"{¦q:¦q}"}. Burada dene!

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

9

Pyth, 7 bayt

.d],`G0

Tek bir anahtar "'abcdefghijklmnopqrstuvwxyz'"ve değer içeren bir sözlük oluşturur 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

Toplu, 16 bayt

Yazdırır {"Windows_NT":0}.

@echo {"%OS%":0}

Lütfen (örnek) çıktısını ekler misiniz?
grooveplex

8

///, 15 14 karakter

/a/{":1234}/aa

(En azından çıkış koddan 1 2 karakter daha uzun.)

Çevrimiçi deneyin!

Sayesinde:

  • Nesne sınırlayıcıları anahtarın parçası olarak yeniden kullanmak için ETHproductions (-1 karakter)

Örnek çalışma:

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

Sadece daha okunaklı hale getirmek için:

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

1
Bu, baytları kurtarmanın en akıllıca yoludur :-)
ETHproductions

2
Başka bir tane /a/{":1234}/aa(çıkışları {":1234}{":1234}) ile kaydedebilirsiniz
ETHproductions

Şaşırtıcı, @ETHproductions. Teşekkürler.
Manatwork

7

R, 19 bayt

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

Biraz daha uzun olur çünkü alıntılardan kaçma ihtiyacı var \". Ayrıca, lhyerleşik veri kümelerinden biridir Rve (benim bildiğim kadarıyla) anahtarın uzunluğunu doldurmak için gereken 9 karakteri içeren en kısa ada sahip nesnedir. (düzenleme: pihile de standart seçenekle aynı şeyi yapar ve ekstra ters eğik çizgi yerine tek tırnak işaretleri kullanarak kaçmak için yeterince zeki olan @JDL tarafından dövüldüm)

lhR dokümantasyonundaki açıklama :

Kan numunelerinde luteinize edici hormon veren, 48 saatlik bir insan dişinden 10 dakika aralıklarla düzenli bir zaman serisi.

hangi bir anahtar beklenmedik bir addır, ancak hey, çalışır ve çıktı üretir:

{" 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}

Cevap, çıktıyı en az 15 karakter (24 bayt) yapmak için sadece "rasgele" harflerle tuşa basmakla karşılaştırılabilir:

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

1
R ifadesinde tek tırnak işareti kullanarak, ters eğik çizgiden kaçınabilirsiniz: cat('{"',lh,'":1}')yukarıda yaptığım gibi ( pibunun yerine kullanılmış olmasına rağmen lh). İki harfli değişkenler araştırmamda, elhiç bilmediğim bir fonksiyonla karşılaştım . Gelecekte faydalı olabilir ...
JDL

7

PowerShell 22 20 14 Bayt

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

Çıktı

{"":1099511627776}

Bayt cinsinden 1TB için tanımlanan sabiti kullanarak karakter sınırına ve geçerli bir json için yapmak üzere statik bir tamsayı değerine ulaşmak. Fazlalık kaldırarak karakterleri 5'e düşürdüğü için TimmyD'ye teşekkürler.


Önceki Yazı 40 Bayt

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

Çıktı

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

Bir tamsayı dizisi alır ve her biri için bir anahtar / değer çifti oluşturur. Virgüllerle birleştirin ve bir küme parantez ile sarın.



6

Retina, 11 bayt

 
{"9$*R":1}

Çıktı

{"RRRRRRRRR":1}

Not: Sonuçta ortaya çıkan çıktıyla hiçbir şey değiştirilmediği için baştaki yeni satır önemlidir, bunu göstermek için ayrılmaz bir alan kullandım!

Çevrimiçi deneyin!


5

V , 9 bayt

i{"¹*":0}

Çevrimiçi deneyin!

Çok basit. Ekleme moduna girer, aşağıdaki metni girer:

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

Bunun bu kadar kısa olmasının nedeni ¹, aşağıdaki karakteri 9 kez tekrarlamasıdır.


0 bayt olanı bekliyordum: P
Maltysen

1
@ maltysen Ben gönderdim. Çift ... yerine tek tırnak işareti kullandığı için sildim ... :(
DJMcMayhem

5

JavaScript (ES6) + jQuery, 15 bayt

Çünkü jQuery.

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

Çağrıldığında çıktılar {"function (a,b){return new n.fn.init(a,b)}":0}. Burada dene:


1
Atama bir şey çıktısını almaktır. sensiz alert()hiçbir şey çıkmıyorsunuz
nl-x

1
@ nl-x OP, dizeyi döndüren işlevlere izin verildiğini açıklığa kavuşturmak için düzenleme yaptı.
ETHProductions

5

Dyalog APL , 9 bayt

JSONDMX

Çevrimiçi deneyin!

Bilgisayarımdaki temiz bir çalışma alanında sonuç

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

⎕JSON JSON'a dönüştür

⎕DMX (evrensel olarak mevcut) D iagnostic M eseri E x eğilimli nesne


4

brainfuck, 83 bayt

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

çıktılar {"333333333":3}

Muhtemelen daha kısa bir çözüm daha var, ancak henüz bulamadım.

Açıklama:

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

Çevrimiçi deneyin


4

PHP, 19 bayt

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

Çıktı: {"387420489":1}

https://eval.in/665889

Tavsiyeler için teşekkürler !


1
Çıktınız 16 karakter uzunluğunda, gereksinim 15 iken. Öyleyse neden “H” yi çıkarmıyorsunuz?
Manatwork

BTW, PHP 5.6'dan beri bir **operatör var: pow(9,9)(9**9).
Manatwork

1
15 karakter (gerçekten PHP değil):{"<?=9**9?>":1}
Loovjo

4

Java 7, 36 bayt

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

Java 8, 21 bayt

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

Ungolfed ve test kodu:

Burada dene.

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

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

Çıkış (uzunluk 15):

{"a":1000000.0}

İkinci çözüm hata veriyor
Numaraknot

1
"karma değerine bağlı olarak uzunluk 15 ile 16 arasında değişir". Hash'lerin teknik olarak uzunluğu 1( bakınızSystem.identityHashCode(Object) ) kadar küçük olabilir .
Olivier Grégoire

1
Ayrıca, ""anahtar ve 1e7değer olarak kullanarak 1 bayt golf oynayabilirsiniz . ""Doğrulayıcıda denendiğinde geçerli bir anahtardır.
Olivier Grégoire

2
@ OlivierGrégoire Tamam, thiskodu kaldıracağım . İle ilgili ""olarak 1e7, ne yazık ki işe yaramaz. 1e6çıktılar 1000000.0, bunun yerine 1e7çıktılar 1.0E7.
Kevin Cruijssen

1
Oh, hatam, kontrol etmedim.
Olivier Grégoire

4

R, 19 bayt

Bu İngiliz İngilizcesi yerelinde çalışır; diğerlerinde +2 bayt gerektirebilir. (Düzenleme: Muhtemelen --- yorumları görmüyor.)

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

Zekice bir şey umuyordum (belki de önceden var olan bir işlevin kod satırından birini çıkardım q) ama hiçbir şey bulamadım. Sonuç:

{" 3.141593 ":1}

Dizgiyi alıntılamak için tekli tırnak işaretleri kullanıyorsanız (ve tersi) tekli tırnak işaretlerinden kaçmak zorunda değilsiniz. Bu davranış yerel ayarlara bağlı olsa da. ABD İngiliz yerelinde de çalışmasını beklerdim.

Bu aynı zamanda varsayılan digitsseçeneğinizin en az altı (fabrikada taze varsayılan) ve scipenen azından -digits(fabrikada taze varsayılan) sıfır olmasını gerektirir.


1
Pardon, ne? R'nin dilbilgisi yerel ayarlarla değişiyor mu?
kedi

Evet, hangi karakterlerin kaçması options(quote)gerektiğine, kullanıcı tarafından hangisinin belirtildiğine bağlı olarak değişir , ancak varsayılan, bildiğim kadarıyla yerel ayarlara bağlıdır.
JDL

@ kedi bu bir yanlış anlaşılma olduğunu düşünüyorum. Varlığı options('quote') değil belgelenen bu kayda değer bir etkisi vardır değişen, ve I RI shenanigans bir hayli karşılaşanlar olsa çalışma zamanı seçenekleri, çözümlenen oluyor şeklini değiştirmek olacağını sanmıyorum. Elbette çıktısını değiştirebilir - ancak bu cevaptaki kodda değildir.
Konrad Rudolph

@Konrad, haklı olabilirsin. Ben sadece etkiler "useFancyQuotes" düşünüyordum düşünüyorum quote, squotevb
JDL


3

Öğe , 18 bayt

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

Çevrimiçi deneyin! çıktılar{"a":387420489}

Bu, saf çözümden yalnızca üç bayt daha kısa. Çıktının ilk yarısı kodlanmıştır (başka bir yaklaşımı mümkün kılmak için çok fazla kaçış karakteri), değer 9^9yeterince uzun olacak şekilde hesaplanır .


3

Perl 5, 16 15 bayt

Programın bir elemanlı nesnenin içeriği olarak başlatıldığı anın unix zaman damgasını kullanır . 3 Mart 1973'te saat 10:46:39'dan sonra çalıştırırsanız geçerli çıktı verir . Ama zaman içinde geri dönemeyiz çünkü bu yasal görünüyor.

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

Varsayılan olarak kullanılan FORMAT_TOP_HANDLE değişkenini$^ kullanır STDOUT_TOP.

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

İle çalıştırın -Ehiçbir ek ücret ödemeden bayrak.

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

Çıktılar 16 bayttır.

{"STDOUT_TOP":1}

RIP zamanına bağlı cevap :(
CalculatorFeline

@CalculatorFeline hu?
simbabque

3

Çedar, 17 14 bayt

@ ConorO'Brien sayesinde 3 bayt kaydedildi

->'{":1234}'*2

{":1234}{":1234}Geçerli bir JSON nesnesi olan dönen bir adsız işlev :

{
  ":1234}{": 1234
}

Çevrimiçi deneyin!


3

Windows toplu iş, 10 bayt

{"%OS%":5}

Ortam değişkeni OSdizeyi içerir Windows_NT( Yığın Taşması ile ilgili bu soruya göre 2000'den beri tüm Windows işletim sistemlerinde )


@ETHproductions Oops
penalosa 25:16

Bu aslında bir şey çıktı mı? Neil 'in Toplu cevabı kesinlikle yok, ancak herhangi bir örtük toplu çıkışı hakkında hatırlamıyorum.
manatwork

@manatwork Evet, yankı açık olduğundan, geçerli komut yankılanır ve işlemdeki işletim sistemi değişkenini değerlendirir.
penalosa

Ah. Öyleyse aslında {"%OS%":5}bir emir olacaktı gibi yapmaya çalışıyor ve temel izleme özelliğinden faydalanıyorsunuz? Bu zor.
Manatwork

@ manatwork Evet, kesinlikle.
penalosa

3

HQ9 +, 15 bayt

{"Quineland":0}

Kendini çıkarır. Bunun gibi 8 baytlık bir cevabın mümkün olacağını düşündüm:

{":11QQ}

Bu çıktılar {":11QQ}{":11QQ}, neredeyse geçerli JSON olan, ancak 11QQgeçerli bir değer değil.

HQ9 +, PPCG standartlarına göre geçerli bir programlama dili değildir , ancak OP, programlama dışı dillere izin verdi.


1
Bu kesinlikle geçerli değil. Tüm başvurular geçerli bir programlama dilinde olmalıdır.
Mego

(Bu yine de sayılır farklı bir şey verir çünkü eğer, çoğunlukla) Bu çoğunlukla kolmo karmaşıklığı, bu yüzden bu geçerli olabileceğini düşünüyorum
yıkılabilir Limon

@ Tahribatsız Karpuz Programlama dışı bir dili kullanmak standart bir boşluktur .
Mego

@Mego OP açıkça programlama dışı dillere izin verdi
ETHproductions
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.