2016-03-29 3 views
0

pour un fichier de référence comparer un besoin de la possibilité de générer des fichiers json, où les accolades commencent toujours dans une nouvelle ligne.Ruby: comment générer une sortie json avec accolades (parenthèses, parenthèses, curlies) dans une nouvelle ligne

Par exemple, le hachage JSON:

my_json = {"Key" => {"Key" => "Value"}} 

conduit après l'appel de

JSON.pretty_generate(my_json) 

à

{ 
    "Key": { 
    "Key": "Value" 
    } 
} 

Mais je dois malheureusement une sortie comme ceci:

{ 
    "Key": 
    { 
    "Key": "Value" 
    } 
} 

Y at-il un moyen d'y parvenir avec ruby ​​sans détruire le joli formatage?

Merci

+1

Je suis curieux de savoir pourquoi vous avez besoin que la production spécifique, ils sont tous les deux JSON valide (comme le ferait '{ « clé »: { "Key": "Value"}} 'bien sûr). –

+0

Avez-vous lu la documentation de 'pretty_generate' qui dit de lire [la documentation' generate'] (http://ruby-doc.org/stdlib-2.3.0/libdoc/json/rdoc/JSON.html#method- i-générer) pour les options? Avez-vous essayé ces options? Qu'avez-vous essayé? –

+0

J'ai essayé une combinaison de: space => "\ n" et: indent => "\ t", mais cela ne résout pas le problème, il détruit même la mise en forme. Je ne veux pas avoir une nouvelle ligne après chaque ":" ... juste après les accolades et encore pour garder le joli formatage –

Répondre

0

Si vous désirez cette différence dans la production, pourquoi ne vous forcez pas? Selon mon commentaire:

pour couvrir les deux MISE À JOUR { et [ support

my_json = {"Keys" => [{"Key" => "Value"},{"key1" => "val2"}], "newkey" => {"nk1" => "val3"}} 

puts JSON::pretty_generate(my_json).gsub(
      /^(.*)(\"[^\"]+\"): ([\{\[])/, #first brackets: white space. Second: Key, Third: Bracket 
      "\\1\\2:\n\\1\\3")    #\\1: white space (on both lines), \\2: Key, \\3: Brac[e|ket] 

{ 
    "Keys": 
    [ 
    { 
     "Key": "Value" 
    }, 
    { 
     "key1": "val2" 
    } 
    ], 
    "newkey": 
    { 
    "nk1": "val3" 
    } 
} 
+0

qui est une bonne approche, merci pour l'instant. Mais pouvez-vous modifier votre commentaire pour travailler aussi avec "[" accolades ... dans mon test, ils ne commencent pas dans une nouvelle ligne. –

+0

@ ŽeljkoSosic, dobro, fait. –

+0

génial. hvala, merci: -) –