Получение пар ключ-значение с сервером Linux - PullRequest
0 голосов
/ 29 июня 2019

Я ищу получить пару ключей от json, которая не отформатирована правильно, поэтому я не могу использовать jq или другие способы получения пар ключ-значение JSON.Кроме того, данные не печатаются в определенном порядке, поэтому я не могу получить их по определенным столбцам или номерам полей.

Каков наилучший способ сделать это?У меня проблемы с созданием регулярного выражения или использованием cut, чтобы это работало.

 root# python3 getprice.py 
{'bid': '11546.94', 'ask': '11551.96', 'volume': {'USD': '51726566.064352112368', 'TLC': '4388.676466043', 'timestamp': 1561785300000}, 'last': '11551.96'}
root# python3 getprice.py
{'last': '11551.96', 'bid': '11546.94', 'ask': '11551.96', 'volume': {'timestamp': 1561785300000, 'USD': '51726566.064352112368', 'TLC': '4388.676466043'}}
root# python3 getprice.py
{'bid': '11547.44', 'ask': '11551.96', 'volume': {'TLC': '4388.676466043', 'timestamp': 1561785300000, 'USD': '51726566.064352112368'}, 'last': '11551.96'}

Ответы [ 2 ]

2 голосов
/ 29 июня 2019

Похоже на JSON, но с кавычками.Если ваш файл выглядит так:

$ cat file.txt
{'bid': '11546.94', 'ask': '11551.96', 'volume': {'USD': '51726566.064352112368', 'TLC': '4388.676466043', 'timestamp': 1561785300000}, 'last': '11551.96'}

, то вы можете:

$ cat file.txt | tr "'" '"' | jq '.'
{
  "bid": "11546.94",
  "ask": "11551.96",
  "volume": {
    "USD": "51726566.064352112368",
    "TLC": "4388.676466043",
    "timestamp": 1561785300000
  },
  "last": "11551.96"
}

или просто получить одно значение, например ask:

$ cat file.txt | tr "'" '"' | jq '.ask'
"11551.96"
0 голосов
/ 29 июня 2019

Кроме написания собственного пользовательского анализатора, самый простой способ анализа этих данных - это, вероятно, eval это в файле node.js (старая техника для анализа JSON до JSON.parse()):

#! /usr/bin/env node
// A simple script to parse javascript objects from stdin (not just JSON)

// Pass the key you want to extract as argument:
let key = process.argv[2];

let rawData = '';

process.stdin.on('data', x => rawData += x.toString());
process.stdin.on('end',() => {
    eval('var obj = ' + rawData);   // CAREFUL - EVAL IS EVIL!!!
    console.log(eval 'obj.' + key); // ALSO EVIL!
});

Сохранитьприведенный выше скрипт как 'jsonparse' и сделать его исполняемым.Тогда вы можете использовать его как:

python3 getprice.py | jsonparse bid
python3 getprice.py | jsonparse volume.USD
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...