2016-09-22 4 views
1

У меня есть команда, я бегу, и это дает выход, как показано ниже:Преобразование JSON довольно печать в одну строку

{ 
"endpointApplications": { 
    "App_Name": { 
     "connectionState": "Disconnected", 
     "connectionTime": "No connection was established", 
     "linkAttributes": { 
      "ackSettings": { 
       "dataAckEnabled": "true", 
       "dataAckTimeout": "5000", 
       "dataNakRetryLimit": "0", 
       "retransmitDelay": "500" 
      }, 
      "keepAliveSettings": { 
       "keepAliveAckTimeout": "5000", 
       "keepAliveInterval": "30000" 
      }, 
      "logTraffic": "false", 
      "port": "9999", 
      "role": "server" 
     }, 
     "protocol": "snmp" 
    } 
}, 
"queueStats": {} 
} 

я должен был бы выход, чтобы быть в одной строке, как показано ниже:

{"endpointApplications": {"app_name": {"connectionState": "Disconnected","connectionTime": "No connection was established","linkAttributes": {"ackSettings":{"dataAckEnabled": "true","dataAckTimeout": "5000","dataNakRetryLimit": "0","retransmitDelay": "500"},"keepAliveSettings":{"keepAliveAckTimeout": "5000","keepAliveInterval": "30000"},"logTraffic": "false","port": "9999","role": "server"},"protocol": "snmp"}},"queueStats":{}} 

Я пробовал использовать awk и sed, комбинируя различные параметры, но я не могу работать, не теряя формат JSON.

+2

Рассмотрите возможность использования 'jq' для все, что вы, по всей видимости, пытается сделать каждую результирующую строку :) – chepner

ответ

1

jq или любой другой json Известный инструмент лучше всего подходит для манипуляций с json-файлами. Однако здесь есть awk решение.

awk -v RS= '{$1=$1}1' input.json 
{ "endpointApplications": { "App_Name": { "connectionState": "Disconnected", "connectionTime": "No connection was established", "linkAttributes": { "ackSettings": { "dataAckEnabled": "true", "dataAckTimeout": "5000", "dataNakRetryLimit": "0", "retransmitDelay": "500" }, "keepAliveSettings": { "keepAliveAckTimeout": "5000", "keepAliveInterval": "30000" }, "logTraffic": "false", "port": "9999", "role": "server" }, "protocol": "snmp" } }, "queueStats": {} } 
+2

Спасибо, команда AWK работала так, как я хотел. –

4

Вы должны использовать jq для вещей как то:

jq -c . input.txt 

Альтернативы быстро грязное решением было бы использовать sed & tr:

sed -e 's/^ *//' < input.txt | tr -d '\n' 

хотя я бы рекомендовал использовать jq, который предназначен для управления JSON. jq как sed для JSON. Манипулирование JSON текстовым способом с sed/awk/etc не гарантирует получение семантически эквивалентного JSON.