python: обновление json ответа с указанием c значения и выгрузка обновленного json резонанса в файл - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь проанализировать большие данные ответа json и заменить одно значение другим значением. Но после обновления значения мне не хватает полей ниже при записи в файл.

    "id": "XXX",
    "tenantId": "YYYY",
    "name": "XXX",
    "version": 46,
    "description": "XXXX",
    "publishStatus": "PUBLISHED",
    "publishStatusName": "Published",
    "components": {

Ниже приведен небольшой фрагмент json исходного ответа.

{
    "id": "XXX",
    "tenantId": "YYYY",
    "name": "XXX",
    "version": 46,
    "description": "XXXX",
    "publishStatus": "PUBLISHED",
    "publishStatusName": "Published",
    "components": {
        "XXX": {
            "data": {
                "storage": {
                    "facets": {
                        "maxValue": {
                            "type": "constant",
                            "value": {
                                "type": "integer",
                                "value": 10000

Ниже приведен код snippet.

  print ("Reading the blueprint data recieved:")
  with open("blueprint_response.txt", 'r') as f5:
   response_data = json.load(f5)
 #  print response_data

#parsing source machine value
   name = response_data["name"]
   print("Source machine value is given below:")
#   print(response_data["components"])
   machine_value = response_data["components"][name]["data"]["source_machine"]["facets"]["fixedValue"]["value"]["label"]
   print (machine_value)

#parsing source machine label name

   print("Source machine label is given below:")
   machine_label = response_data["components"][name]["data"]["source_machine_name"]["facets"]["fixedValue"]["value"]["value"]
   print (machine_label)

#Editing the blueprint_response file with image name

   updated_response_data = response_data

#   for i  in range(len(os_template_updated)):

   if (os_template_updated [num] == machine_value):
     print ("The OS templates are same, no change required..!!!")

   else:

     updated_response_data["components"][name]["data"]["source_machine_name"]["facets"]["fixedValue"]["value"]["value"] = os_template_updated[num]

     updated_response_data["components"][name]["data"]["source_machine"]["facets"]["fixedValue"]["value"]["label"] = os_template_updated[num]
     print updated_response_data

     with open ("blueprint_response_update.txt", "w") as f6:
      json.dump(updated_response_data, f6) 
 

Я хочу отредактировать 2 значения и записать в новый файл со всем исходным ответом json без изменений. Что я здесь делаю не так? пожалуйста, помогите мне. заранее благодарю

1 Ответ

0 голосов
/ 10 июля 2020

Ваша строка:

updated_response_data = response_data

Это копирование ссылки на исходные данные. Вам нужно создать новый словарь:

updated_response_data = dict(response_data)

должен сделать это.

...