如何在本地计算机上存储JSON数据?

时间:2011-01-12 23:52:59

标签: json

这个问题困扰了我好几个月,现在,无论我读了多少文章和主题,我都没有得到好的信息......

我想向返回JSON文件的服务器发送请求。我想获取这些结果并将它们加载到本地计算机上的表中。最好是Access或Excel,这样我就可以对数据进行排序和操作。

有没有办法做到这一点......?请帮忙!!

5 个答案:

答案 0 :(得分:2)

Google提出了这个问题:json2excel

或者编写自己的小应用程序。

修改

我决定很好,为你编写一个python3应用程序。在命令行上使用,如python jsontoxml.py infile1.json infile2.json,它将输出infile1.json.xml和infile2.json.xml。

#!/usr/bin/env python3

import json
import sys
import re
from xml.dom.minidom import parseString

if len(sys.argv) < 2:
    print("Need to specify at least one file.")
    sys.exit()

ident = " " * 4

for infile in sys.argv[1:]:
    orig = json.load(open(infile))

    def parseitem(item, document):
        if type(item) == dict:
            parsedict(item, document)
        elif type(item) == list:
            for listitem in item:
                parseitem(listitem, document)
        else:
            document.append(str(item))

    def parsedict(jsondict, document):
        for name, value in jsondict.items():
            document.append("<%s>" % name)
            parseitem(value, document)
            document.append("</%s>" % name)

    document = []
    parsedict(orig, document)

    outfile = open(infile + ".xml", "w")
    xmlcontent = parseString("".join(document)).toprettyxml(ident)
     #http://stackoverflow.com/questions/749796/pretty-printing-xml-in-python/3367423#3367423
    xmlcontent = re.sub(">\n\s+([^<>\s].*?)\n\s+</", ">\g<1></", xmlcontent, flags=re.DOTALL)
    outfile.write(xmlcontent)

示例输入

{"widget": {
    "debug": "on",
    "window": {
        "title": "Sample Konfabulator Widget",
        "name": "main_window",
        "width": 500,
        "height": 500
    },
    "image": { 
        "src": "Images/Sun.png",
        "name": "sun1",
        "hOffset": 250,
        "vOffset": 250,
        "alignment": "center"
    },
    "text": {
        "data": "Click Here",
        "size": 36,
        "style": "bold",
        "name": "text1",
        "hOffset": 250,
        "vOffset": 100,
        "alignment": "center",
        "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
    }
}}

示例输出

<widget>
    <debug>on</debug>
    <window title="Sample Konfabulator Widget">
        <name>main_window</name>
        <width>500</width>
        <height>500</height>
    </window>
    <image src="Images/Sun.png" name="sun1">
        <hOffset>250</hOffset>
        <vOffset>250</vOffset>
        <alignment>center</alignment>
    </image>
    <text data="Click Here" size="36" style="bold">
        <name>text1</name>
        <hOffset>250</hOffset>
        <vOffset>100</vOffset>
        <alignment>center</alignment>
        <onMouseUp>
            sun1.opacity = (sun1.opacity / 100) * 90;
        </onMouseUp>
    </text>
</widget>

答案 1 :(得分:1)

这可能有些过分,但MongoDB使用JSON样式的文档作为原生格式。这意味着您可以直接插入JSON数据,只需很少或不需要修改。它可以自己处理JSON数据,而不必跳过箍来强制您的数据采用更加RDBMS友好的格式。

它是开源软件,适用于大多数主要平台。它还可以处理大量数据和多个服务器。

它的命令shell可能不像Excel或Access那么容易使用,但是它可以自己进行排序等,如果你发现你需要的话,大多数编程语言都有绑定(例如C,Python和Java)做更棘手的事情。

编辑:

为了从/向其他更常见的格式导入/导出数据,MongoDB有几个useful utilities。虽然你应该记住JSON使用结构化对象,但要想直接映射到基于表格的模型(如CSV),尤其是在像MongoDB这样的无模式数据库上,也不容易使用CSV。

将JSON转换为CSV或任何其他RDBMS友好格式接近(如果它没有直接输入)字段或Object-Relational Mapping,这通常既不简单也不容易自动化。

例如,MongoDB工具允许您创建CSV文件,但您必须指定每个列中的哪个字段,隐式假设您的数据中实际存在某种模式。

MongoDB允许您存储和操作结构化JSON数据,而不必经历繁琐的映射过程,而不是非常令人沮丧。您将不得不修改您的思维方式,稍微偏离传统的数据库表格视图,但它允许您处理要处理的数据,而不是尝试强制表格模型。

答案 2 :(得分:0)

Json(与xml一样)是一个树而不是文字的元素表。您需要手动填充表(基本上是一堆SQL LEFT JOINS)或填充一堆表并手动操作连接。

或JSON扁平包装? MAY 可以做你要问的事情,我只是指出没有保证。

如果它是一个快速的kludge,并且数据是flatpacked,那么快速脚本来读取json,转储到csv然后在Excel中打开可能是最简单的。

答案 3 :(得分:0)

我想,无法轻松存储在Access或Excel中。你必须用任何支持它的编程语言解析json字符串(PHP,NodeJS,Python,...都有本机支持),然后使用库输出带有数据的Excel表。

根据您对编程语言的精通程度,其他可能是一个选项是使用类似ElasticSearch搜索引擎或CouchDB数据库的东西,它们本身都支持json输入。然后,您可以使用它们以各种方式查询内容。

答案 4 :(得分:0)

我以前做过那样的事。将JSON转换为HTML表格。这意味着,你可以变成csv。 但是这里有一些你需要知道的东西 1)JSON数据必须格式化为预定义的结构。 e.g。

 {
   [
    ['col1', 'col2', 'col3'],
    [data11, data12, data13],
    ...
   ]
 }

2)U必须逐行逐列解析数据。如果可能的话,你必须处理丢失的数据或不匹配的列。当然,您必须了解数据类型。

3)我的经验是,如果你有大量可笑的数据,那么这样做会杀死客户端的浏览器。您必须逐步从服务器获取格式化的HTML或CSV数据。

正如上面的夜间工具所建议的,试试谷歌工具。 :)