【问题标题】:Converting string file into json format file将字符串文件转换为json格式文件
【发布时间】:2014-01-03 10:02:49
【问题描述】:

好的,假设我有一个名为 "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: 预期的字符串或缓冲区

【问题讨论】:

  • 一方面,你在 string.txt 之前有两个双引号 => f = open(""string.txt", 'w');其次,您的 JSON sn-p(第一个代码块)被截断/丢失了一些。
  • Google 搜索了您的错误 - 这是第一个结果。看看对你有没有帮助。 stackoverflow.com/questions/12326370/…
  • @arzeramade 用轻松的语气 - 只是想更好地理解你在问什么。
  • 文件是否包含换行符?在这种情况下发布几行完整的行。
  • 该快照无济于事,因为它可能位于文件中的任何位置,其中 JSON 格式不正确,因此无法正确加载或根本无法加载。

标签: python python-2.7


【解决方案1】:
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 行第 102663 列 - 第 1 行第 106497 列(字符 102662 - 106496)这是错误
  • @arzeramade 从错误中可以明显看出,文本文件的格式不完全适合作为 JSON 加载。您应该查看文件 - 解决问题并重试 Shaung 的解决方案。
  • @arzeramade 指定范围内有什么?使用例如。这个要检查:print open("string.txt","rb").read()[102662:106497]
  • @Nicarus:这就是我告诉你的,我必须手动执行此操作吗?为了适合 ti 加载为 json?
  • @Nicarus:是的,我知道,但是如何使文本对 json 加载有效?
【解决方案2】:

这实际上取决于您的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"
    }
]

【讨论】:

    猜你喜欢
    • 2016-08-28
    • 2023-01-20
    • 1970-01-01
    • 2021-11-09
    • 2019-04-01
    • 2014-10-03
    • 1970-01-01
    • 2021-10-15
    • 2015-12-17
    相关资源
    最近更新 更多