Как удалить десятичный разряд в числах в массиве JSON?

Если вы не заключаете в кавычки EOFв <<EOF, расширение выполняется локальной оболочкой внутри документа (, поэтому $(date...)расширяется с помощью локального date, а $YYрасширен до значения в локальной оболочке (пустым, если вы не присвоили значение ранее )). Если вы хотите, чтобы содержимое документа -дословно передавалось в удаленную оболочку, вам нужно так или иначе процитировать EOF:

ssh -T root@IP << 'EOF'
YY=$(date +'%y')
echo "$YY"
EOF  
4
22.12.2019, 23:49
1 ответ

Просто пропустив его через идентификационный фильтр с jqпереформатировать числа, которые имеют .0десятичную дробь, в целые числа:

$ jq. file.json
[
  {
    "IMSKU": "1000001",
    "AttributeID": 7332,
    "Value": "McAfee Host Intrusion Prevention for Desktops safeguards your business against complex security threats that may otherwise be unintentionally introduced or allowed by desktops and laptops. Host Intrusion Prevention for Desktops is easy to deploy, configure, and manage.",
    "Unit": null,
    "StoredValue": null,
    "StoredUnit": null,
    "Name": "Marketing text",
    "Format": "1",
    "Position": "1",
    "Group_Name": "Basic Specification",
    "AGGroup_Position": 0,
    "Product_Hierarchy": 15198001453
  },

(etc.)

Если есть числа с десятичными знаками, отличными от нуля, и вы хотите их удалить, используйте

jq '(.. | select(type == "number" )) |= floor' file.json

Это применит функцию floorко всем числам в данных, округляя их до ближайшего целого числа.

Также исследовать, есть ли строки, содержащие цифры после точки в самом конце, и удалить эти цифры (и точку):

jq '(.. | select(type == "string")) |= sub("\\.[0-9]+$"; "")' file.json

Затронутые записи по-прежнему будут строками и не будут преобразованы в числовой тип.

11
27.01.2020, 20:48

Теги

Похожие вопросы