JQ comment imprimer saut de ligne et pas de caractère de fin de ligne de valeur json
J'ai quelques journaux d'informations de sortie en JSON. C'est pour la collecte d'elasticsearch.
Certains testeurs et les opérations de gens veulent être en mesure de lire les journaux sur les serveurs.
Voici quelques exemple JSON:
{
"@timestamp": "2015-09-22T10:54:35.449+02:00",
"@version": 1,
"HOSTNAME": "server1.example",
"level": "WARN",
"level_value": 30000,
"logger_name": "server1.example.adapter",
"message": "message"
"stack_trace": "ERROR LALALLA\nERROR INFO NANANAN\nSOME MORE ERROR INFO\nBABABABABABBA BABABABA ABABBABAA BABABABAB\n"
}
Et ainsi de suite.
Est-il possible de faire Jq impression de saut de ligne à la place de l' \n char?
OriginalL'auteur jjgong | 2015-09-22
Vous devez vous connecter pour publier un commentaire.
L'entrée comme à l'origine donnée n'est pas tout à fait JSON valide, et on ne sait pas précisément ce que le résultat souhaité est, mais ce qui suit pourrait vous intéresser. Il est écrit pour la version actuelle de jq (version 1.5), mais pourrait facilement être adapté pour jq 1.4:
De sortie:
jigong - Vous pouvez faire toutes ces choses en utilisant json2qjson, mais tout dépend de la nature exacte de l'entrée. Avez-vous un flux d'objets JSON ou un tableau? Dans le premier cas, ils sont conformes à la jsonlines convention? Aussi, depuis jq ne dispose pas d'une option de ligne de commande pour chef ou queue, vous devrez programme que dans jq vous-même, sauf si l'entrée suit la jsonlines convention. En bref, votre énoncé du problème est insuffisant pour donner de plus amples détails.
Si vous êtes sur jq 1.4 (version disp. dans le courant de Ubuntu ATM), vous pouvez utiliser
sed
à la place (voir ma réponse pour plus de détails).OriginalL'auteur peak
Sûr! À l'aide de la
-r
option, jq va de la chaîne d'impression du contenu directement à la borne au lieu de JSON échappé à cordes.Eh bien, jq toujours sorties JSON valide les éléments, sauf si les chaînes sur
-r
. Vous pourriez faire un peu bizarre de la chaîne de conversion de l'objet, mais vous ne voulez probablement pas à le faire. Quel est le but de cette conversion? Il se sent comme il est peu probable d'être la bonne approche pour tout problème que vous visez à résoudre.OriginalL'auteur
Sauf si vous êtes contrainte d'utiliser
jq
seulement, vous pouvez "fix" (ou plutôt "non-json-identifier")jq
sortie avecsed
:Si vous avez des onglets aussi bien en entrée (
\t
en JSON), puis:Ce serait particulièrement utile si votre
stack_trace
a été généré par Java (vous ne dites pas quelle est la source de l'journaux), le Java stacktrace lignes de commencer avec<tab>at<space>
.Avertissement: naturellement, ce n'est pas corriger, dans un sens que JSON entrée contenant
\\n
entraînera une "sortie", cependant il devrait se traduire par "n" de sortie. Tout n'est pas correcte, c'est certainement suffisant pour jeter un oeil à des données par les humains. Lesed
modèles peuvent encore être améliorées pour prendre soin de cela (au détriment de la lisibilité).OriginalL'auteur Piotr Findeisen