Python) Как преобразовать строку в dict?(Странный тип строки) - PullRequest
0 голосов
/ 27 мая 2019

Строка ..

{
   "version":"20131101",
   "logo":"http://image.aladin.co.kr/img/header/2011/aladin_logo_new.gif",
   "title":"알라딘 베스트셀러 리스트 - 철학사",
   "link":"http:\/\/www.aladin.co.kr\/shop\/common\/wbest.aspx?BestType=Bestseller&BranchType=1&CID=51441&Year=2019&Month=5&Week=4&partner=openAPI",
   "pubDate":"Mon, 27 May 2019 10:33:33 GMT",
   "totalResults":955,
   "startIndex":1,
   "itemsPerPage":10,
   "query":"QueryType=BESTSELLER;CategoryId=51441;Year=2019;Month=5;Week=4",
   "searchCategoryId":51441,
   "searchCategoryName":"철학사",
   "item":[
      {
         "title":"처음 읽는 서양철학사 (개정증보판) - 서양의 대표 철학자 40인과 시작하는 철학의 첫걸음",
         "link":"http:\/\/www.aladin.co.kr\/shop\/wproduct.aspx?ItemId=100442130&partner=openAPI&start=api",
         "author":"안광복 (지은이)",

      }
   ]
}

Я хочу преобразовать строку в dict.

Это то, что я хочу

  1. Я хочусделать всю строку в словарь, поэтому я хочу получить значение "item"

    "item" : [{"title: ", " : ", ... }, {"title: ", " : ", ...  }, { "title: ", " : ", ... }]
    
  2. Я хочу словари (выглядит как словарь, но строка) в списке (выглядит каксписок, но str), поэтому я хочу использовать как словарь

    print(decoding_bestseller.find("item",370))
    b=decoding_bestseller.split('"item"')
    want_str=b[1]
    want_str1=want_str.strip(':[]{}')
    want_list=want_str1.split(',')
    book_dic = {}
    for i in range(0,len(want_list)):
        in_colon = ":" in want_list[i]
        if in_colon:
            split_list = want_list[i].split(':')
            book_key = split_list[0].strip('""')
            book_value = split_list[1].strip('""')
            book_dic[book_key] = book_value
    

Я сделал это, но мне не удалось.

Строка такая {" : ", " : ", "item : [ {"title : ", "link : ", } {"title : ", "link : ", }, " : "}

я хочу сделать {"title : ", "link : ", ...} РЕАЛЬНЫМ словарем!

Ответы [ 3 ]

2 голосов
/ 27 мая 2019

Если ваша строка написана хорошо (без ошибки json, вы можете проверить там , чтобы исправить ваш json), тогда вы можете использовать json.loads(yourString) ( doc )

0 голосов
/ 27 мая 2019

Формат предоставленной вами строки - JSON. В Python есть модуль json , который имеет функцию loads(). Эта функция преобразует вашу строку в dict объект.

Но в строке, которую вы указали, есть одна проблема:

"автор": "안광복 (지은이)" >>>, <<< </strong>}]}

Эта кома нарушает стандарт JSON и вызывает ошибку в декодере. Если это просто опечатка, то просто удалите ее. Если исходная строка действительно содержит это, вы должны удалить ее из строки перед декодированием (например, string.replace(",}", "}"))

Как декодировать:

import json

string = """{
   "version":"20131101",
   "logo":"http://image.aladin.co.kr/img/header/2011/aladin_logo_new.gif",
   "title":"알라딘 베스트셀러 리스트 - 철학사",
   "link":"http:\/\/www.aladin.co.kr\/shop\/common\/wbest.aspx?BestType=Bestseller&amp;BranchType=1&amp;CID=51441&amp;Year=2019&amp;Month=5&amp;Week=4&amp;partner=openAPI",
   "pubDate":"Mon, 27 May 2019 10:33:33 GMT",
   "totalResults":955,
   "startIndex":1,
   "itemsPerPage":10,
   "query":"QueryType=BESTSELLER;CategoryId=51441;Year=2019;Month=5;Week=4",
   "searchCategoryId":51441,
   "searchCategoryName":"철학사",
   "item":[
      {
         "title":"처음 읽는 서양철학사 (개정증보판) - 서양의 대표 철학자 40인과 시작하는 철학의 첫걸음",
         "link":"http:\/\/www.aladin.co.kr\/shop\/wproduct.aspx?ItemId=100442130&amp;partner=openAPI&amp;start=api",
         "author":"안광복 (지은이)"
      }
   ]
}"""

object_from_string = json.loads(string)

value_of_item = object_from_string["item"]

for value in value_of_item:
    for k, v in value.items():
        print(f"{k} = {v}")

Выход:

title = 처음 읽는 서양철학사 (개정증보판) - 서양의 대표 철학자 40인과 시작하는 철학의 첫걸음
link = http://www.aladin.co.kr/shop/wproduct.aspx?ItemId=100442130&amp;partner=openAPI&amp;start=api
author = 안광복 (지은이)
0 голосов
/ 27 мая 2019

Вы можете создать словарь из строки, используя eval.

as_string = str({"version":"20131101","logo":"http://image.aladin.co.kr/img/header/2011/aladin_logo_new.gif","title":"알라딘 베스트셀러 리스트 - 철학사","link":"http:\/\/www.aladin.co.kr\/shop\/common\/wbest.aspx?BestType=Bestseller&amp;BranchType=1&amp;CID=51441&amp;Year=2019&amp;Month=5&amp;Week=4&amp;partner=openAPI","pubDate":"Mon, 27 May 2019 10:33:33 GMT","totalResults":955,"startIndex":1,"itemsPerPage":10,"query":"QueryType=BESTSELLER;CategoryId=51441;Year=2019;Month=5;Week=4","searchCategoryId":51441,"searchCategoryName":"철학사","item":[{"title":"처음 읽는 서양철학사 (개정증보판) - 서양의 대표 철학자 40인과 시작하는 철학의 첫걸음","link":"http:\/\/www.aladin.co.kr\/shop\/wproduct.aspx?ItemId=100442130&amp;partner=openAPI&amp;start=api","author":"안광복 (지은이)",}]})
as_dict = eval(as_string)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...