V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
meteor2013
V2EX  ›  Python

没找到好的工具,看来要自己写代码解析 JSON 文件然后存 MYSQL 数据库。但是 JSON 文件中有{}嵌套{},应该怎么解析啊。有点崩溃了,好难啊。。。。

  •  1
     
  •   meteor2013 · 2014-08-25 20:40:57 +08:00 · 5521 次点击
    这是一个创建于 3743 天前的主题,其中的信息可能已经有所发展或是发生改变。

    JSON 文件:这是其中的两条记录,出现{}嵌套{},

    感觉应该把外面那个{}存一个table,然后把嵌套的user那个{}单独拿出来放另一个table,
    但是解析JSON的时候,怎么知道哪个是外面的{}是哪个是里面的{}啊。而且两个table怎么关联啊
    好难啊。。。。

    {“text”:“Photo: seco http://tumblr.com/xjd1bnfg4w”,“id_str”:“28965133095010304”,“id”:28965133095010304,“created_at”:“Sun Jan 23 24:00:00 +0000 2011”,“retweeted”:false,“retweet_count”:0,“favorited”:false,“user”:{“id_str”:“45378162”,“id”:45378162,“screen_name”:“Cosmic_dog”,“name”:“Pablo”},“
    requested_id”:28965133095010304}

    {“text”:“Jam belapa cekalang? Akuh males mandi, nantian ajadah mandinyah .”,“id_str”:“28965133204066304”,“id”:28965133204066304,“created_at”:“Sun Jan 23 24:00:00 +0000 2011”,“retweeted”:false,“retweet_count”:0,“favorited”:false,“user”:{“id_str”:“129102416”,“id”:129102416,“screen_name”:“ivanagho”,“name”:“Ivana”},“
    requested_id”:28965133204066304}

    17 条回复    2014-08-26 11:20:52 +08:00
    mgcnrx11
        1
    mgcnrx11  
       2014-08-25 20:52:36 +08:00
    这个,其实就是写个parser。

    LZ可以看看https://github.com/jjenkov/parsers-in-java

    还有篇文章专门讲解这个算法的
    young
        2
    young  
       2014-08-25 20:53:05 +08:00
    这不就是二维数组吗,难吗?
    我猜楼主没有实际decode的看下
    rrfeng
        3
    rrfeng  
       2014-08-25 20:53:38 +08:00
    不应该先根据内容设计好表结构再来解析吗。。
    mgcnrx11
        4
    mgcnrx11  
       2014-08-25 20:58:30 +08:00
    这里有一篇解释http://www.infoq.com/cn/articles/HIgh-Performance-Parsers-in-Java

    当然,其实LZ直接找个工具把JSON转为Object就可以了
    starsoi
        5
    starsoi  
       2014-08-25 21:21:37 +08:00
    直接用json.loads就行了啊

    from __future__ import print_function

    s = """
    {"text":"Photo: seco http://tumblr.com/xjd1bnfg4w","id_str":"28965133095010304","id":28965133095010304,"created_at":"Sun Jan 23 24:00:00 +0000 2011","retweeted":false,"retweet_count":0,"favorited":false,"user":{"id_str":"45378162","id":45378162,"screen_name":"Cosmic_dog","name":"Pablo"},"requested_id":28965133095010304}
    """

    from json import loads

    row = loads(s)

    for k, v in row.items():
    if isinstance(v, dict):
    print(k+': ')
    for ki, vi in v.items():
    print(' '+ki+': ', vi)
    else:
    print(k+': ', v)
    mhycy
        6
    mhycy  
       2014-08-25 21:24:14 +08:00
    ....随便找个对JSON友好的语言解码一下重新生成数据不就完了
    Python JS PHP 随便选啊
    meteor2013
        7
    meteor2013  
    OP
       2014-08-25 21:25:10 +08:00
    @mhycy 这个办法听起来比较愉快。
    kisshere
        8
    kisshere  
       2014-08-25 22:14:49 +08:00
    为啥不用json_decode函数生成array,再遍历数组存入mysql
    sheaven
        9
    sheaven  
       2014-08-25 22:40:53 +08:00
    如果可以存mongodb更方便
    hepin1989
        10
    hepin1989  
       2014-08-25 22:51:18 +08:00
    里面那个取的话,比如以play-json为列,就是val userNode = jsonvalue \ "user",
    如果用jsonnode的话,就是 JsonNode userNode = jsonvalue.getNode("user")

    不难的哈
    Biwood
        11
    Biwood  
       2014-08-25 23:28:38 +08:00
    不知道为什么要分开存储,{}套括号套{}不正是JSON特色嘛,如果在Javascript里面,操作起来简直是得心应手,要获取用户id就直接data.user.id,这样解析起来还蛋疼吗
    chigco
        12
    chigco  
       2014-08-26 00:09:39 +08:00
    好像没怎么难啊。转换成对象,做关联。
    Mutoo
        13
    Mutoo  
       2014-08-26 00:12:59 +08:00
    看这场景,应该是 mongodb 的活儿。
    nine
        15
    nine  
       2014-08-26 09:04:02 +08:00
    我很好奇,你用的啥语言 ,没有解析json的库?

    php
    json_decode(...)


    python

    import json
    json.loads(...)

    ruby
    require 'json'
    JSON::parse(...)


    嵌套的user 放到user表里不就行了?
    hzz780
        16
    hzz780  
       2014-08-26 10:28:57 +08:00
    我觉得,不论用什么,json都有自己的格式,key-value,如果是自己写,暴力点,对每一层进行判断,{ "key1":"value","key2":[{}{}] }按顺序遍历,然后检查是否有儿子没有的话直接进数据库,,有的话进去,一步一步的加数据库啰……码农渣,勿喷。
    withinthefog
        17
    withinthefog  
       2014-08-26 11:20:52 +08:00
    var data = require('./data.json');

    _.forEach(data,function(item) {
    user = item.user;
    delete item.user;

    WhateverItemModelYouUse = new WhateverItemModel(item);

    WhateverItemModelYouUse.save(function(newItem){
    user.item_id = newItem.id;
    WhateverUserModelYouUse = new WhateverUserModelYouUse(use);
    WhateverUserModelYouUse.save(function(){
    console.log('done!');
    });
    })
    // other staff...
    })


    写完发现是python节点....
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1563 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 17:10 · PVG 01:10 · LAX 09:10 · JFK 12:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.