JSON 배열의 숫자에서 소수점 자리를 제거하는 방법은 무엇입니까?

JSON 배열의 숫자에서 소수점 자리를 제거하는 방법은 무엇입니까?

bash다음과 같이 JSON 파일의 숫자에서 모든 소수 자릿수를 효과적으로 제거하기 위해 스크립트에서 실행할 수 있는 셸 명령은 무엇입니까 ?

    [
        {
            "IMSKU": "1000001", 
            "AttributeID": 7332.0, 
            "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.0, 
            "Product_Hierarchy": 15198001453.0
        }, 
        {
            "IMSKU": "1000001", 
            "AttributeID": 7343.0, 
            "Value": "May 2013", 
            "Unit": null, 
            "StoredValue": null, 
            "StoredUnit": null, 
            "Name": "PI Date", 
            "Format": "1", 
            "Position": "1", 
            "Group_Name": "PI DATE", 
            "AGGroup_Position": 1.0, 
            "Product_Hierarchy": 15198001453.0
        }, 
        {
            "IMSKU": "1000001", 
            "AttributeID": 7344.0, 
            "Value": "McAfee", 
            "Unit": null, 
            "StoredValue": "0.00", 
            "StoredUnit": null, 
            "Name": "Brand Name", 
            "Format": "3", 
            "Position": "1", 
            "Group_Name": "PRODUCT", 
            "AGGroup_Position": 2.0, 
            "Product_Hierarchy": 15198001453.0
        }
    ]

~하도록 하다

"AttributeID":  7344.0

될 것입니다

"AttributeID":  7344

예를 들어 등.

답변1

ID 필터를 통해 실행하고 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.)

소수 자릿수가 0이 아닌 숫자가 있고 그 숫자도 제거하려면 다음을 사용하십시오.

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

이는 floor데이터의 모든 숫자에 함수를 적용하고 가장 가까운 정수로 내림합니다.

또한 끝의 점 뒤에 숫자가 포함된 문자열이 있는지 조사하고 해당 숫자(및 점)를 제거합니다.

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

영향을 받는 항목은 여전히 ​​문자열이며 숫자 유형으로 변환되지 않습니다.

관련 정보