Drucken Sie etwas JSON


74

Diese Herausforderung ist unkompliziert, aber es gibt hoffentlich viele Möglichkeiten, wie Sie sie angehen können:

Sie müssen ein gültiges JSON- Objekt mit mindestens 15 Zeichen drucken / zurückgeben , wobei nicht benötigte Leerzeichen nicht berücksichtigt werden. Ihr Programm sollte ohne Eingabe funktionieren.

Aus Gründen der Übersichtlichkeit beginnt und endet ein JSON-Objekt mit geschweiften Klammern {}und enthält null oder mehr Schlüssel-Wert-Paare, die durch Kommas getrennt sind. Die vollständige JSON-Spezifikation finden Sie unter json.org . Die Ausgabe Ihres Codes muss diesen Validator bestehen .

Daher ist Folgendes nicht gültig:

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

Doch die folgenden würde gelten:

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

Nicht-Programmiersprachen sind für diese Herausforderung zulässig. Sie können eine Zeichenfolge aus einer Funktion zurückgeben oder ausdrucken. Dies ist ein , also antworten Sie mit so wenig Code wie möglich!


1
Ich mag die Vielzahl von Antworten auf diese Frage
Robert Fraser

Hmmmm, Ihre Definition von JSON ist begrenzt. Was ist mit Code, der gültiges JSON ausgibt, aber keine geschweiften Klammern ausgibt?
Konijn

4
@Konijn wie gesagt, es muss ein gültiges JSON- Objekt sein . Das Objekt wird durch die geschweiften Klammern definiert.
Nathan Merrill


1
@ Masterzagh Leider zählt ein natives JS-Objekt nicht. "Sie können eine Zeichenfolge aus einer Funktion zurückgeben oder ausdrucken"
Nathan Merrill

Antworten:


72

Python 2, 14 Bytes

print{`str`:1}

Ausgänge:

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

Die Backticks erhalten die Zeichenfolgendarstellung in Python 2. In der Regel werden bei dieser Ausgabe einfache Anführungszeichen erstellt, die Python als Zeichenfolgeabgrenzung erkennt, JSON jedoch nicht. Sp3000 stellt jedoch fest, dass die Typbeschreibung beim Stringing eines Typs bereits einfache Anführungszeichen enthält, wodurch die äußeren Anführungszeichen in doppelte Anführungszeichen gesetzt werden.


20
@ Sp3000 Das ist auf schreckliche Weise schön.
Xnor

6
Und ich dachte, JS ist die einzige Sprache, in der man das Typ-Casting wirklich missbrauchen kann ...
Downgoat

der gleiche ansatz funktioniert für py3 mit 20 bytesprint({repr(str):1})
dahrens

1
@dahrens für Py3: print({"'"*9:9})für 16 ( print{"'"*9:9}ist eine weitere 14 in Py2)
Jonathan Allan

37

jq, 6 Zeichen

(3 Zeichen Code + 3 Zeichen Befehlszeilenoption.)

env

CW, weil ich sicher bin, dass dies nicht die Art von Antwort ist, die Sie zulassen wollten.

Probelauf:

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

(Leistung offensichtlich verkürzt.)


6
Dies ist definitiv eine gültige Einreichung (und keine Notwendigkeit, CW)
Nathan Merrill


1
Dies gilt als Auslagerung der Lösung in ein eingebautes System, das beinahe eine verbotene Lücke darstellt. Stichwort: fast
John Dvorak

1
@JanDvorak Es ist nicht immer eine Lücke, denn es gibt Fälle, in denen es interessant ist, ein eingebautes Gebrauchtgerät zu sehen. Das ist einer von ihnen.
Fengyang Wang

1
Ich werde es nicht gegen Ihre ausdrücklichen Wünsche tun, aber ich stimme zu, dass dies ungewollt sein sollte. Derzeit herrscht Konsens darüber, dass Interpreter-Flags den Unterschied zwischen Aufrufen mit und ohne Flag zählen müssen, sodass -nein Leerzeichen drei zusätzliche Bytes ausmacht.
Dennis

31

Jelly , 11 Bytes

“Ɠɼ'ẸẠḌȷżÑ»

Probieren Sie es online!

Ausgabe

{"Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch":0}


1
Es hat 6 Konsonanten in einer Reihe zweimal ( pwllgwund bwllll). Was ist das überhaupt?
Steven H.

2
@ETHproductions Sicher, aber ich brauche mindestens 9 Buchstaben, um das Limit einzuhalten. Alle Wörter mit mehr als 6 Buchstaben befinden sich im langen Wörterbuch, daher spielt es keine Rolle, welches Sie auswählen.
Dennis


8
Warten Sie, Jelly hat eine eingebaute dafür ?
Buffer Over Read

19

Notizblock, 7 Tastenanschläge

Wenn Sie einen Windows-Computer mit dem Programm Notepad haben, geben Sie Folgendes ein:

{"F5":0}

Zumindest auf meinem Windows 7-Computer erhalten Sie so etwas wie:

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

1
@cat Es ist ein Programm, keine Programmiersprache, aber andererseits glaube ich, dass Vim dasselbe ist.
ETHproductions

2
Nun, Vim ist eine "Programmiersprache", die sowohl die PPCG-Regeln (nicht die Turing-Vollständigkeit) als auch die Turing-Vollständigkeit (zumindest bin ich mir ziemlich sicher) erfüllt
cat

1
@cat Ich verstehe. Ich bin nicht sicher, ob Notepad vollständig ist. Ich bezweifle es, aber vielleicht; Immerhin hat /// das bewiesen, und Notepad kann seine einzige Funktion ziemlich gut nachbilden.
ETHproductions

1
Vim unterscheidet sich von Notepad - Sie können ein Skript speichern und im Editor ausführen. Es gibt keine solche Funktion in Notepad. Daher erfordern die Funktionen in Notepad (rudimentäres Suchen und Ersetzen, Kopieren und Einfügen), die es ermöglichen, TC zu sein, jedes Mal Navigationsdialoge - was mehr Tastenanschläge bedeutet.
Mego

1
@cat Ja, sorry, ich meinte es ist seit unserer Diskussion erlaubt.
ETHproductions

15

Java (JDK 10) , 20 Byte

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

Probieren Sie es online!

Ausgabe

{"":3.3333333333333335}

3
Java ist die letzte Sprache, die ich erwarten würde, +um String.concat>: ^ (
cat

3
@cat Ja, es ist tatsächlich die einzige existierende Überlastung. Das Ding ist es nicht einmal überladen String.concat! Wenn Sie den Bytecode überprüfen, ist es das , was Java kompiliert in: ()->new StringBuilder("{\"\":").append(1/.3).append("}").toString(). Keine Sorge, dies ist immer noch die längste Antwort auf dieser Seite, abgesehen von der Brainfuck-Antwort und der Java 7-Antwort. So hält Java seinen Rang;)
Olivier Grégoire

14

PHP, 14 13 Bytes

{"":<?=M_E?>}

Gibt ein nettes mathematisches Objekt aus , das man fast so tun könnte, als wäre es nützlich :

{"":2.718281828459}

Die Tatsache, dass PHP alles außerhalb der Tags wörtlich ausgibt, um Anführungszeichen zu setzen, M_Ewar die kürzeste Konstante, die ich finden konnte.

edit: speicherte ein Byte dank Lynn. Leider ist es kein "nettes" mathematisches Objekt mehr.


""ist ein gültiger JSON-Schlüssel.
Lynn

14

JavaScript, 17-15 Bytes

Vielen Dank an @Neil für diesen. Anruf ohne Eingabe.

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

Ausgänge {"undefined":0}

Alte Version, 16 Bytes

Vielen Dank an @ kamoroso94 für -1 in dieser Version

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

Ausgänge {"":9000000000}


Sie können dies in eine Pfeilfunktion umwandeln, um 4 Bytes zu entfernen.
DanTheMan

1
Können Sie einen leeren Schlüssel haben? (zB entfernen a)
Conor O'Brien

_=>`{"a":${_}}`ergibt {"a":undefined}, das sind genau 15 Zeichen. Beachten Sie, dass Sie beim Aufrufen dieser Funktion keine Eingabe verwenden
Bassdrop Cumberwubwubwub

1
@BassdropCumberwubwubwub Zufällig besteht Ihr Code auch aus 15 Zeichen. Ich bin nicht sicher , dass undefinedein gültiger Wert in JSON, aber das leicht fixiert ist , indem sie es die Eigenschaftsnamen zu machen und einen Nullwert mit: _=>`{"${_}":0}`.
Neil

3
Entfernen Sie die a, um den Schlüssel zur leeren Zeichenfolge zu machen, einem gültigen Schlüssel in JSON. 1 Byte weniger.
Kamoroso94

12

Brainfuck, 50 Bytes

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

Ausgänge {"999999999999999999999999999999999999999999999999999999999999999999999999999999999":9}. Nimmt einen Interpreter an, der 8-Bit-Zellen hat und links nicht begrenzt ist. Probieren Sie es online!




9

Pyth, 7 Bytes

.d],`G0

Erstellt ein Wörterbuch mit einem einzelnen Schlüssel "'abcdefghijklmnopqrstuvwxyz'"und Wert 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 Bytes

Druckt {"Windows_NT":0}.

@echo {"%OS%":0}

Könnten Sie bitte die (Beispiel-) Ausgabe hinzufügen?
Grooveplex

8

///, 15 14 Zeichen

/a/{":1234}/aa

(Die Ausgabe ist mindestens 1 bis 2 Zeichen länger als der Code.)

Probieren Sie es online!

Dank an:

  • ETHproductions zur Wiederverwendung der Objektbegrenzer als Teil des Schlüssels (-1 Zeichen)

Probelauf:

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

Nur um es lesbarer zu machen:

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

1
Das ist eine clevere Art, Bytes zu sparen :-)
ETHproductions

2
Sie können eine weitere mit /a/{":1234}/aa(Outputs {":1234}{":1234})
ETHproductions

Erstaunlich, @ETHproductions. Vielen Dank.
Manatwork

7

R, 19 Bytes

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

Wird etwas länger, weil man Anführungszeichen entziehen muss \". Außerdem lhist einer der integrierten Datensätze in Rund ist (meines Wissens) das Objekt mit dem kürzesten Namen, das die 9 Zeichen enthält, die zum Ausfüllen der Schlüssellänge benötigt werden. (edit: stellt sich heraus, dass pidies auch mit der Standardoption funktioniert, und ich wurde von @JDL geschlagen, der klug genug war, einfache Anführungszeichen anstelle der zusätzlichen Backslashes zu verwenden)

Die Beschreibung lhin der R-Dokumentation lautet:

Eine regelmäßige Zeitreihe, in der das luteinisierende Hormon in Blutproben in Abständen von 10 Minuten von einer menschlichen Frau aus 48 Proben entnommen wird.

Das ist ein ziemlich unerwarteter Name eines Schlüssels, aber hey, es funktioniert und erzeugt die Ausgabe:

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

Die Antwort kann mit dem einfachen Auffüllen des Schlüssels mit "zufälligen" Buchstaben verglichen werden, um eine Ausgabe von mindestens 15 Zeichen (24 Byte) zu erzielen:

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

1
Sie können das Entstehen von Backslashes vermeiden, indem Sie einfache Anführungszeichen im R-Ausdruck verwenden: cat('{"',lh,'":1}')wie oben (obwohl ich sie pianstelle von verwendet habe lh). Bei der Suche nach Variablen mit zwei Buchstaben bin ich auf eine Funktion gestoßen, von elder ich nie wusste, dass sie existiert. Könnte in Zukunft nützlich sein ...
JDL

7

PowerShell 22 20 14 Bytes

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

Ausgabe

{"":1099511627776}

Verwenden Sie die für 1 TB in Bytes definierte Konstante, um die Zeichenbegrenzung zu erreichen, und den Wert einer statischen Ganzzahl, um einen gültigen JSON-Wert zu erhalten. Vielen Dank an TimmyD für die Reduzierung der Zeichen um 5, indem einige Redundanzen entfernt wurden.


Frühere Post 40 Bytes

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

Ausgabe

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

Nimmt ein Integer-Array und erstellt für jedes ein Schlüssel-Wert-Paar. Verbinden Sie mit Kommas und wickeln Sie mit einem Satz geschweiften Klammern.



6

Retina, 11 Bytes

 
{"9$*R":1}

Ausgabe

{"RRRRRRRRR":1}

Hinweis: Die führende Zeile ist von Bedeutung, da nichts durch die resultierende Ausgabe ersetzt wird. Ich habe ein nicht unterbrechendes Leerzeichen verwendet, um dies zu veranschaulichen.

Probieren Sie es online!


5

V , 9 Bytes

i{"¹*":0}

Probieren Sie es online!

Sehr einfach. Aktiviert den Einfügemodus und gibt den folgenden Text ein:

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

Der Grund, warum dies so kurz ist, liegt darin, dass ¹das folgende Zeichen neunmal wiederholt wird.


Ich habe das 0-Byte-1 erwartet: P
Maltysen

1
@maltysen Ich habe es gepostet. Ich habe es gelöscht, weil es einfache Anführungszeichen anstelle von doppelten verwendet ... :(
DJMcMayhem

5

JavaScript (ES6) + jQuery, 15 Byte

Weil jQuery.

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

Ausgänge {"function (a,b){return new n.fn.init(a,b)}":0}beim Aufruf. Probieren Sie es hier aus:


1
Die Aufgabe besteht darin, etwas auszugeben. ohne das alert()du nichts ausgibst
nl-x

1
@ nl-x Das OP wurde bearbeitet, um zu verdeutlichen, dass Funktionen, die den String zurückgeben, zulässig sind.
ETHproductions

5

Dyalog APL , 9 Bytes

JSONDMX

Probieren Sie es online!

In einem sauberen Arbeitsbereich auf meinem PC ist das Ergebnis

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

⎕JSON in JSON konvertieren

⎕DMX die (allgemein verfügbar) D iagnostic M Nachricht E x Objekt neigten


4

Brainfuck, 83 Bytes

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

Ausgänge {"333333333":3}

Es gibt wahrscheinlich eine andere kürzere Lösung, aber ich habe sie noch nicht gefunden.

Erläuterung:

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

Probieren Sie es online aus


4

PHP, 19 Bytes

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

Ausgabe: {"387420489":1}

https://eval.in/665889

Danke an manatwork für die Tipps!


1
Ihre Ausgabe ist 16 Zeichen lang, während die Anforderung 15 ist. Warum also nicht das "H" entfernen?
Manatwork

Übrigens gibt es seit PHP 5.6 einen **Operator: pow(9,9)(9**9).
Manatwork

1
15 Zeichen (nicht wirklich PHP):{"<?=9**9?>":1}
Loovjo

4

Java 7, 36 Bytes

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

Java 8, 21 Bytes

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

Ungolfed & Testcode:

Probieren Sie es hier aus.

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

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

Ausgabe (Länge 15):

{"a":1000000.0}

Zweite Lösung gibt einen Fehler
Numberknot

1
msgstr "Länge variiert je nach Hash zwischen 15 und 16". Hashes können technisch gesehen eine Länge von nur 1( sieheSystem.identityHashCode(Object) ) haben.
Olivier Grégoire

1
Sie können auch 1 Byte Golf spielen, indem Sie ""als Schlüssel und 1e7als Wert verwenden. ""ist ein gültiger Schlüssel, wenn er im Validator ausprobiert wird.
Olivier Grégoire

2
@ OlivierGrégoire Ok, ich werde den thisCode entfernen . Was das ""mit 1e7angeht, funktioniert das leider nicht. 1e6Ausgänge 1000000.0, sondern 1e7Ausgänge 1.0E7.
Kevin Cruijssen

1
Oh, mein Fehler, ich habe nicht nachgesehen.
Olivier Grégoire

4

R, 19 Bytes

Dies funktioniert in britischem Englisch. In anderen Fällen sind möglicherweise +2 Byte erforderlich. (Edit: es sieht wahrscheinlich keine Kommentare.)

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

Ich hatte auf etwas Kluges gehofft (vielleicht eine Codezeile aus einer bereits vorhandenen Funktion wie q), konnte aber nichts finden. Das Ergebnis:

{" 3.141593 ":1}

Beachten Sie, dass Sie doppelte Anführungszeichen in R nicht umgehen müssen, wenn Sie einfache Anführungszeichen verwenden, um die Zeichenfolge in Anführungszeichen zu setzen (und umgekehrt). Dieses Verhalten ist jedoch vom Gebietsschema abhängig. Ich würde erwarten, dass es auch in einem US-englischen Gebietsschema funktioniert.

Dies setzt auch voraus, dass Ihre Standardoption digitsmindestens sechs (die werkseitige Standardeinstellung) und scipenmindestens -digitsnull (die werkseitige Standardeinstellung) beträgt.


1
Entschuldigung, was? Die Grammatik von R ändert sich mit dem Gebietsschema?
Katze

Ja, welche Zeichen maskiert werden müssen, hängt davon ab, options(quote)welche vom Benutzer angegeben werden können. Die Standardeinstellung ist jedoch meines Wissens vom Gebietsschema abhängig.
JDL

@cat Ich denke das ist ein Missverständnis. Das Vorhandensein von options('quote') ist nicht dokumentiert , eine Änderung hat keine erkennbaren Auswirkungen, und obwohl ich in RI auf viele Spielereien gestoßen bin, bezweifle ich, dass Laufzeitoptionen die Art und Weise, wie es analysiert wird, ändern würden. Es kann natürlich die Ausgabe ändern - aber nicht im Code in dieser Antwort.
Konrad Rudolph

@Konrad, vielleicht hast du recht. Ich denke, ich dachte an "useFancyQuotes", die nur betrifft quote, squoteetc.
JDL


3

Element , 18 Bytes

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

Probieren Sie es online! Ausgänge{"a":387420489}

Dies ist nur drei Bytes kürzer als die naive Lösung. Die erste Hälfte der Ausgabe ist fest codiert (zu viele Escape-Zeichen, um einen anderen Ansatz zu ermöglichen), während der Wert so berechnet wird 9^9, dass eine Zahl lang genug ist.


3

Perl 5, 16, 15 Bytes

Verwendet den Unix-Zeitstempel des Zeitpunkts, zu dem das Programm gestartet wurde, als Inhalt eines Ein-Element-Objekts. Es gibt eine gültige Ausgabe, wenn Sie es später als 10:46:39 am 3. März 1973 ausführen . Aber da wir nicht in der Zeit zurückkehren können, scheint das legitim zu sein.

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

Verwendet die Variable FORMAT_TOP_HANDLE,$^ die standardmäßig verwendet wird STDOUT_TOP.

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

Laufen Sie mit -EFlagge ohne zusätzliche Kosten.

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

Die Ausgabe ist 16 Byte lang.

{"STDOUT_TOP":1}

RIP zeitabhängige Antwort: (
CalculatorFeline

@CalculatorFeline hu?
Simbabque

3

Cheddar, 17 14 Bytes

3 Bytes gespart dank @ ConorO'Brien

->'{":1234}'*2

Eine anonyme Funktion {":1234}{":1234}, die ein gültiges JSON-Objekt zurückgibt :

{
  ":1234}{": 1234
}

Probieren Sie es online!


3

Windows Batch, 10 Bytes

{"%OS%":5}

Die Umgebungsvariable OSenthält die Zeichenfolge Windows_NT(Auf allen Windows-Betriebssystemen seit 2000 laut dieser Frage zum Stapelüberlauf)


@ETHproductions Ups
penalosa

Gibt dies tatsächlich etwas aus? Neil ‚s Batch Antwort sicherlich der Fall ist, sondern kann jede implizite Batch - Ausgabe nicht erinnern.
Manatwork

@manatwork Ja, da das Echo aktiviert ist, wird der aktuelle Befehl zurückgemeldet und dabei die OS-Variable ausgewertet.
Penalosa

Oh. Also versucht es tatsächlich, das auszuführen, {"%OS%":5}als wäre es ein Befehl und Sie profitieren von der elementaren Verfolgungsfunktion? Das ist knifflig.
Manatwork

@manatwork Ja genau.
Penalosa

3

HQ9 +, 15 Bytes

{"Quineland":0}

Gibt sich selbst aus. Ich dachte, eine 8-Byte-Antwort wäre wie folgt möglich:

{":11QQ}

Diese Ausgabe {":11QQ}{":11QQ}ist fast ein gültiger JSON- 11QQWert , aber kein gültiger Wert.

HQ9 + ist nach PPCG-Standards keine gültige Programmiersprache , das OP hat jedoch Nicht-Programmiersprachen zugelassen.


1
Dies ist absolut nicht gültig. Alle Einsendungen müssen in einer gültigen Programmiersprache sein.
Mego

Dies ist meistens eine Kolmo-Komplexität (meistens, weil wenn es etwas anderes ausgibt, zählt es immer noch), also denke ich, dass dies gültig sein könnte
Destructible Lemon

@DestructibleWatermelon Die Verwendung einer Nicht-Programmiersprache ist eine Standardlücke .
Mego

@Mego OP hat jetzt explizit Nicht-Programmiersprachen zugelassen
ETHproductions
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.