質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

551閲覧

文字列をjson化したい

Male_soprano

総合スコア10

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/08/18 04:22

編集2020/08/18 05:36

初歩的な質問で恐縮です.
テキストファイルの中から一部を抽出し,辞書・JSON化したいと考えています.
しかし,以下のようなエラーメッセージが出てきました.解決して,下記のような出力を得たいと考えています(「理想の出力結果」参照).
原因と解決策をご教示いただけますと幸いです.宜しくお願いします.

エラーメッセージ

Traceback (most recent call last): File "pyautogui_penta.py", line 34, in <module> result = str(dict).decode('string-escape') AttributeError: 'str' object has no attribute 'decode'

該当のソースコード

#!/usr/bin/python # -*- coding: utf-8 -*- import re import pyautogui as pg import requests as rq import json as js import glob import os from datetime import datetime as dt from io import StringIO #ファイルを開く #年月日を抽出して曜日を削除 for line in open("test.txt", encoding="utf-8"): ma = re.search("202[0-9].[0-9]{1,2}.[0-9]{1,2}", line) if ma: tdt = dt.strptime(ma.group(0), '%Y.%m.%d') ymd = tdt.strftime('%Y-%m-%d') #print(tstr) #時間,ユーザー名,メッセージを抽出 line3 = [] for line2 in open("test.txt", encoding="utf-8"): mb = re.search("[0-9][0-9]:[0-9][0-9]", line2) if mb: list = line2.split() time = list[0] hms = time + ":00" name = list[1] message = list[2] line3.append(message) else: list = line2.split() if (len(list) < 2): line3[len(line3)-1] += list[0] for line4 in line3: message = line4 #jsonに変換 dict = {'time':time, 'name':name, 'message':message} result = js.dumps(dict, ensure_ascii=False) print(result)

txt

12020.08.13 木曜日 223:58 ポプ子 えいえい!怒った? 323:59 ピピ美 怒ってないよ. 42020.08.14 金曜日 501:00 天の声 何気ないマンボが 6サンバ師匠をきずつけた 701:30 ポプ子 エサヒィ~スープゥードゥラァァァ~イ!!! 802:00 ピピ美 しょーがねーだろ赤ちゃんなんだから

理想の出力結果

{1:{time:"2020-08-13 23:58:00", name:"ポプ子", message:"えいえい!怒った?"}, 2:{time:"2020-08-13 23:59:00", name:"ピピ美", message:"怒ってないよ."}, 3:{time:"2020-08-14 01:00:00", name:"天の声", message:"何気ないマンボが サンバ師匠をきずつけた"}, 4:{time:"2020-08-14 01:30:00", name:"ポプ子", message:"エサヒィ~スープゥードゥラァァァ~イ!!!"}, 5:{time:"2020-08-14 02:00:00", name:"ピピ美", message:"しょーがねーだろ赤ちゃんなんだから"}}

補足情報(FW/ツールのバージョンなど)

MacOS10.15.4, Python3.7.3, Atom

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2020/08/18 04:27

エラーとコードがあっていませんので確認ください。
Male_soprano

2020/08/18 04:32

大変失礼致しました.訂正しましたのでご確認いただけますと幸いです.
can110

2020/08/18 05:21

問題が大幅に変わっていませんか?
guest

回答1

0

ベストアンサー

result = str(dict).decode('string-escape')は不要です。
代わりにresult = js.dumps(dict, ensure_ascii=False)すればよいです。

投稿2020/08/18 04:46

can110

総合スコア38278

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Male_soprano

2020/08/18 05:06

有難うございます. お陰様でエラーは解決したのですが,出力の一部がバイト列になっていて正しく表示することができません. これはどのように考えたら宜しいでしょうか?
can110

2020/08/18 05:09

回答のとおりに「ensure_ascii=False」を指定していますか?
Male_soprano

2020/08/18 05:22

古い行を残していました.失礼しました.
can110

2020/08/18 05:23

質問(問題)が大幅に変わっていませんか? エンコードに関する質問ではなかったでしょうか?
Male_soprano

2020/08/18 05:37

大変失礼しました.仰る通りです. 再度別のページにて質問を立てます.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問