잘못된 json 파일에서 jq 사용

잘못된 json 파일에서 jq 사용

안녕하세요, jq를 사용하여 잘못된 json 파일에서 필드를 추출할 수 있습니까?

{
    '_id': ObjectId('58049da30b78a4a11e3c9869'),
    'name': 'joe bam',
    'username': 'joe_bam',
    'contact_info': {
        'email': 'N/[email protected]'
    },
    'color': 'Blue',
    'updated_at': datetime.datetime(2017, 5, 18, 11, 16, 19, 737000),
    'created_at': datetime.datetime(2016, 10, 17, 9, 45, 7, 226000),
    'token': '$2y$10$VMgv1S/NiGzkPsGhc4S.6eGFvEXv5YenlWQNdqUbVy4aGaeKOyxpi',
    'views': 29,
    'status_logged': True,
    'provider': 'signup'
}

이 예에서는 추출하고 싶습니다.jq -r '[.name, .username, |contact_info .email] | @csv'

그게 가능합니까? ? 이 json의 유효성을 검사하고 오류가 발생했기 때문에

감사해요!

답변1

thanasisp 사용자가 말했듯이댓글에서, 문서는 MongoDB 쿼리의 출력일 가능성이 높으며 데이터베이스 엔진을 사용하여 JSON으로 올바르게 변환하면 더 잘 해결할 수 있습니다.

그러나 yq유틸리티는 다음에서 비롯됩니다.https://kislyuk.github.io/yq/(래핑된 YAML 파서 jq)는 마치 YAML인 것처럼 문서를 있는 그대로 구문 분석할 수 있습니다.

$ yq -r '[.name, .username, .contact_info.email] | @csv' file
"joe bam","joe_bam","N/[email protected]"

제가 "일종의"라고 말한 이유는 ID 필터를 통과하면 다음과 같은 문제가 발생하기 때문입니다.

$ yq . file
{
  "_id": "ObjectId('58049da30b78a4a11e3c9869')",
  "name": "joe bam",
  "username": "joe_bam",
  "contact_info": {
    "email": "N/[email protected]"
  },
  "color": "Blue",
  "updated_at": "datetime.datetime(2017",
  "5": null,
  "18": null,
  "11": null,
  "16": null,
  "19": null,
  "737000)": null,
  "created_at": "datetime.datetime(2016",
  "10": null,
  "17": null,
  "9": null,
  "45": null,
  "7": null,
  "226000)": null,
  "token": "$2y$10$VMgv1S/NiGzkPsGhc4S.6eGFvEXv5YenlWQNdqUbVy4aGaeKOyxpi",
  "views": 29,
  "status_logged": true,
  "provider": "signup"
}

관련 정보