ok1012
@ok1012

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

OpenaiのAPI、gpt-4-turbo-previewの出力を辞書方に変換してx_pathに代入する方法を教えて下さい。

解決したいこと

ここに解決したい内容を記載してください。
print(completion.choices[0].message)の出力結果が、

ChatCompletionMessage(content='```python\n{\n"//select[@name=\'your-req\']": True,\n
"//textarea[@name=\'your-msg\']": \'詳細を入力します\',\n
"//input[@name=\'your-company\']": \'株式会社おか\',\n
"//input[@name=\'your-name\']": \'山田太郎\',\n
"//input[@name=\'your-furigana\']": \'やまだたろう\',\n
"//input[@name=\'your-post\']": \'部長\',\n
"//input[@name=\'your-tel\']": \'0334909999\',\n
"//input[@name=\'your-mail\']": \'xxx@gmail.com\',\n
"//select[@name=\'your-que01\']": True,\n
"//textarea[@name=\'your-que01-etc\']": \'その他の理由\',\n
"//select[@name=\'your-que02\']": True,\n
"//textarea[@name=\'your-que02-etc\']": \'その他の理由\',\n
"//input[@name=\'agreement\']": True,\n
"//button[@id=\'mhFormConfirm\']": \'click\'\n}\n```', role='assistant', function_call=None, tool_calls=None)

例)
Chatgptを活用して、自動でHTMLを解析する仕組みを作成しています。

発生している問題・エラー

---------------------------------------------------------------------------
JSONDecodeError                           Traceback (most recent call last)
Cell In[220], line 6
      3 content_string = completion.choices[0].message.content
      5 # JSON文字列をPythonの辞書に変換
----> 6 x_path = json.loads(content_string)
      8 # 変換された辞書を表示
      9 print(x_path)

File ~/miniforge3/lib/python3.10/json/__init__.py:346, in loads(s, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
    341     s = s.decode(detect_encoding(s), 'surrogatepass')
    343 if (cls is None and object_hook is None and
    344         parse_int is None and parse_float is None and
    345         parse_constant is None and object_pairs_hook is None and not kw):
--> 346     return _default_decoder.decode(s)
    347 if cls is None:
    348     cls = JSONDecoder

File ~/miniforge3/lib/python3.10/json/decoder.py:337, in JSONDecoder.decode(self, s, _w)
    332 def decode(self, s, _w=WHITESPACE.match):
    333     """Return the Python representation of ``s`` (a ``str`` instance
    334     containing a JSON document).
    335 
    336     """
--> 337     obj, end = self.raw_decode(s, idx=_w(s, 0).end())
    338     end = _w(s, end).end()
    339     if end != len(s):

File ~/miniforge3/lib/python3.10/json/decoder.py:355, in JSONDecoder.raw_decode(self, s, idx)
    353     obj, end = self.scan_once(s, idx)
    354 except StopIteration as err:
--> 355     raise JSONDecodeError("Expecting value", s, err.value) from None
    356 return obj, end

JSONDecodeError: Expecting value: line 1 column 1 (char 0)

該当するソースコード

Python

例)

import json
content_string = completion.choices[0].message.content
x_path = json.loads(content_string)
print(x_path)

自分で試したこと

データの型などを調べたりしましたが、最適な解が出てきません。
分かる方、教えて下さい。

0

1Answer

下記で解決しました。

import ast

# ChatGPT APIの出力結果を変数に代入
output_string = completion.choices[0].message.content

# 出力結果から不要な部分を削除(ここではバッククォートとpythonタグの削除)
# バッククォート(```)とpythonタグを削除
cleaned_output = output_string.strip('`python\n')

# 文字列をPythonの辞書に安全に変換
xpath = ast.literal_eval(cleaned_output)

# 変換された辞書を表示
print(xpath)
1Like

Your answer might help someone💌