将字符串文件转换为json格式文件

时间:2014-01-03 10:02:50

标签: python python-2.7

好吧,假设我有一个名为“string.txt”的字符串文本文件,我想将其转换为json文本文件。 我想做什么?我曾尝试使用'json.loads()',但它永远不适合我! 这是我的文本文件中的一部分:

rdian","id":"161428670566653"},{"category":"Retail and consumer merchandise","category_list":[{"id":"187937741228885","name":"Electronics Store"},{"id":"191969860827280","name":"Photographic Services & Equipment"}

有什么帮助吗? 编辑: 我使用了这段代码:

import json

f = open("string.txt", 'w')
f1 = open("stringJson.txt", 'r')


f.write(json.dumps(json.loads(f), indent=1))


f.close()

错误是这样的:

obj,end = self.raw_decode(s,idx = _w(s,0).end()) TypeError:期望的字符串或缓冲区

enter image description here

3 个答案:

答案 0 :(得分:8)

import json
with open("string.txt", "rb") as fin:
    content = json.load(fin)
with open("stringJson.txt", "wb") as fout:
    json.dump(content, fout, indent=1)

请参阅http://docs.python.org/2/library/json.html#basic-usage

答案 1 :(得分:1)

在这种情况下
您需要阅读文件的内容

obj, end = self.raw_decode(s, idx=_w(s, 0).end()) TypeError: expected string or buffer



    import json

    f = open("string.txt", 'w')
    f1 = open("stringJson.txt", 'r')
    data = json.loads(f1)
    f.write(json.dumps(data, indent=1))
    f.close()

答案 2 :(得分:0)

这实际上取决于txt文件的结构。但是,假设您有一个结构化的txt文件,如下所示:

BASE|30-06-2008|2007|2|projected
BASE|30-06-2007|2010|1|projected
BASE|30-06-2007|2009|3|projected
BASE|30-06-2007|2020|2|projected
...

您可以使用如下脚本:

import codecs
import json

import numpy as np
import pandas as pd

raw_filepath = "your_data.txt"

field_names = [
    "Scenario",
    "Date",
    "Year",
    "Quarter",
    "Value"
]

data_array = np.genfromtxt(raw_filepath, delimiter="|", dtype=None, encoding="utf-8")
df = pd.DataFrame.from_records(data_array)
df.columns = field_names
result = df.to_json(orient="records")
parsed = json.loads(result)
out_json_path = "your_data.json"

### saves pandas dataframe in .json format
json.dump(
    parsed, codecs.open(out_json_path, "w", encoding="utf-8"), sort_keys=False, indent=4
)

说明

要在Numpy中加载数据集,我们可以使用genfromtxt()函数。我们可以指定数据文件名,定界符(这是可选的,但经常使用)以及如果有标题行时要跳过的行数。 genfromtxt()函数具有一个名为dtype的参数,用于指定每列的数据类型(此 参数是可选的)。如果不指定类型,则将所有类型都强制转换为更通用/更精确的类型,并且numpy将尝试 推断列的类型。

在这一部分df.to_json(orient="records")中,我们正在使用“记录”格式的JSON对数据帧进行编码/解码。请注意,索引标签不会使用此编码保留。这样,我们可以像Pandas Documentation中所述获得这样的输出:

>>>result = df.to_json(orient="records")
>>>parsed = json.loads(result)
>>>json.dumps(parsed, indent=4)  
[
    {
        "col 1": "a",
        "col 2": "b"
    },
    {
        "col 1": "c",
        "col 2": "d"
    }
]