JSON 파일의 요소를 바꾸는 방법은 무엇입니까?

JSON 파일의 요소를 바꾸는 방법은 무엇입니까?

다음 텍스트를 바꿔야 합니다.

"name":["abc1234"], age:"24" 

그리고

"name": "abc1234", age: "24"

답변1

내가 올바르게 이해했다면 "이름" 목록을 첫 번째 요소로 바꿔야 합니다. 이 경우 Json 프로세서를 사용해 보십시오.

jq '.name=.name[0]' ex.json

(전체 게시 취소 예시에서 조정해야 할 수도 있음)

답변2

일반적인 대답은

man 7 regex

하지만 구체적으로

sed -E 's/"name":\["abc1234"\], age:"24" /"name": "abc1234", age:"24"/g' file > new

또는

sed -E 's/"name" *: *\["([^"]+)"\], *age *: *"([0-9]+)"/"name": "\1", age:"\2"/g' file > new
grep -E '"name" *: *\[' new

답변3

또 다른 옵션은 다음을 사용하는 것입니다.Python JSON 모듈좋다이 답변. 간단한 예는 다음과 같습니다.

  • in.json

    { "name":["abc1234"], "age":"24" }
    
  • replaceInJson.py

    #!/usr/bin/python3
    
    import json
    
    with open("in.json", "r") as f:
        data = json.load(f)
        print("Before:", data)
        data["name"] = data["name"][0]
        print("After: ", data)
    
  • 산출

    Before: {'name': ['abc1234'], 'age': '24'}
    After:  {'name': 'abc1234', 'age': '24'}
    

답변4

JSON 문서가 올바른 형식으로 구성되어 있고 두 키 name합계가 age아래와 같이 최상위 키라고 가정합니다.

{
   "name": [ "abc1234" ],
   "age": "24"
}

jq...그런 다음 키 값을 배열의 첫 번째 요소로 바꿀 수 있습니다.name

$ jq '.name |= first' file
{
  "name": "abc1234",
  "age": "24"
}

입력이 다음과 같은 유사한 요소의 배열인 경우

[
   {
      "age": "24",
      "name": [ "abc1234" ]
   },
   {
      "age": "24",
      "name": [ "abc1234" ]
   },
   {
      "age": "24",
      "name": [ "abc1234" ]
   },
   {
      "age": "24",
      "name": [ "abc1234" ]
   }
]

그런 다음 map각 요소에 대해 다음을 수행합니다.

$ jq 'map(.name |= first)' file
[
  {
    "name": "abc1234",
    "age": "24"
  },
  {
    "name": "abc1234",
    "age": "24"
  },
  {
    "name": "abc1234",
    "age": "24"
  },
  {
    "name": "abc1234",
    "age": "24"
  }
]

관련 정보