>

다음 스키마가 있는데 contact 값을 업데이트하고 싶습니다.  그리고 geo  base64의 객체 값으로.

예 :

data = [{"country":"germany","details":[{"state":"BR","location_details":[{"zipcode":"49875","contact":[{"contact_information":["a@ger.org"],"type":"email","phone":"444-44-4444"},{"contact_information":["b@ger.org"],"type":"email","phone":"555-44-4444"}],"geo":[{"center":["55.4"],"rotate":"50","parallels":"6000"},{"center":["55.4"],"rotate":"50","parallels":"6000"}]}]}]}]

예상 출력 :

[{"country":"germany","details":[{"state":"BR","location_details":[{"zipcode":"49875","contact":"W3tjb250YWN0X2luZm9ybWF0aW9uOlthQGdlci5vcmddLHR5cGU6ZW1haWwscGhvbmU6NDQ0LTQ0LTQ0NDR9LHtjb250YWN0X2luZm9ybWF0aW9uOltiQGdlci5vcmddLHR5cGU6ZW1haWwscGhvbmU6NTU1LTQ0LTQ0NDR9XQo=","geo":"W3tjZW50ZXI6WzU1LjRdLHJvdGF0ZTo1MCxwYXJhbGxlbHM6NjAwMH0se2NlbnRlcjpbNTUuNF0scm90YXRlOjUwLHBhcmFsbGVsczo2MDAwfV0K"}]}]}]

이 작업을 동적으로 수행하고 싶지만이 목록이 커지고 해당 필드를 업데이트 할 수 있기를 원합니다. 대체 된 값으로 동일한 스키마 객체를 다시 작성하십시오.

코드 :

import base64
for flat_data in data:
    for detail in data.get("details"):
        for location_detail in detail.get("location_details"):
            _contact = base64.b64encode(location_detail.get("paths"))
            _geo = base64.b64encode(location_detail.get("geo"))

업데이트: 대체 된 값으로 동일한 스키마 객체를 다시 작성해야한다는 점을 강조하고 싶습니다! 또한, data  목록 내에 여러 개체를 가질 수 있습니다.


  • 답변 # 1

    왜 그런지 묻지 않아요 ^^ 나는 당신의 괴물을 x 라고 부릅니다 :

    x = [{"country":"germany",
          "details":[{"state":"BR",
                      "location_details":[{"zipcode":"49875",
                                           "contact":[{"contact_information":["a@ger.org"],"type":"email","phone":"444-44-4444"},
                                                      {"contact_information":["b@ger.org"],"type":"email","phone":"555-44-4444"}],
                                           "geo":[{"center":["55.4"],"rotate":"50","parallels":"6000"},
                                                  {"center":["55.4"],"rotate":"50","parallels":"6000"}]}]}]}]
    
    

    base64로 원하는 부분을 인코딩하는 방법입니다 :

    import base64
    # You need to convert your object to bytes
    # Here, I printed it to a string and converted that to bytes,
    # but there are other options,
    # I can't really tell *why* you are doing it, so it is
    # hard to say how to encode. 
    z = str(x[0]['details'][0]['location_details'][0]['contact']).encode('utf-8')
    # Bytes to base64 encoded
    out = base64.b64encode(z).decode('utf-8') 
    print(out)                       
    
    

    json.dumps(...).encode('utf-8')  인코딩 대신 사용할 수도 있습니다.

    편집

    이제 객체를 재생성하는 데에는 두 가지 옵션이 있습니다. 원본 데이터가 필요하지 않거나 보관해야합니다. 전자의 경우는 다음과 같습니다

    import base64
    for data in x:
       for detail in data['details']:
            for location_details in detail['location_details']:
                z = str(location_details['contact']).encode('utf-8')
                out = base64.b64encode(z).decode('utf-8') 
                location_details['contact'] = out
                z2 = str(location_details['geo']).encode('utf-8')
                out2 = base64.b64encode(z2).decode('utf-8') 
                location_details['geo'] = out2
    print(x)                       
    
    

    원본 데이터가 필요한 경우 먼저해야합니다

    import copy
    x2 = copy.deepcopy(x)
    
    

    x2 와 함께 작동

  • 답변 # 2

    이 작업의 목적이 무엇인지 확실하지 않지만이 코드는 원하는 작업을 수행합니다.

    먼저 코드에 오류가 있으므로 여기에서 수정되었습니다. 둘째,b64encode ()메소드는 바이트를 인수로 취하므로 list는 바이트를 얻지 않으므로 location_detail.get("geo") 목록을 변환했습니다.  & location_detail.get("geo")  문자열로. 문자열에서 바이트를 얻으려면encode ()메소드를 사용하면됩니다.

    import base64
    data = [{"country":"germany","details":[{"state":"BR","location_details":[{"zipcode":"49875","contact":[{"contact_information":["a@ger.org"],"type":"email","phone":"444-44-4444"},{"contact_information":["b@ger.org"],"type":"email","phone":"555-44-4444"}],"geo":[{"center":["55.4"],"rotate":"50","parallels":"6000"},{"center":["55.4"],"rotate":"50","parallels":"6000"}]}]}]}]
    for flat_data in data:
        for detail in flat_data.get("details"):
            for location_detail in detail.get("location_details"):
                _contact = base64.b64encode(str(location_detail.get("contact")).encode())
                _geo = base64.b64encode(str(location_detail.get("geo")).encode())
    
    

    출력

    _geo = b'W3snY2VudGVyJzogWyc1NS40J10sICdyb3RhdGUnOiAnNTAnLCAncGFyYWxsZWxzJzogJzYwMDAnfSwgeydjZW50ZXInOiBbJzU1LjQnXSwgJ3JvdGF0ZSc6ICc1MCcsICdwYXJhbGxlbHMnOiAnNjAwMCd9XQ=='
    _contact = b'W3snY29udGFjdF9pbmZvcm1hdGlvbic6IFsnYUBnZXIub3JnJ10sICd0eXBlJzogJ2VtYWlsJywgJ3Bob25lJzogJzQ0NC00NC00NDQ0J30sIHsnY29udGFjdF9pbmZvcm1hdGlvbic6IFsnYkBnZXIub3JnJ10sICd0eXBlJzogJ2VtYWlsJywgJ3Bob25lJzogJzU1NS00NC00NDQ0J31d'
    
    

  • 이전 파이썬"클래스"단어 상징
  • 다음 javascript - ES6 스타일 가져 오기와 함께 내장 Nodejs 또는 브라우저 API 메소드를 조건부로 사용하는 방법은 무엇입니까?