推荐学习书目
› 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 · Aug 25, 2014 · 6710 views
    This topic created in 4462 days ago, the information mentioned may be changed or developed.

    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 replies  •  2014-08-26 11:20:52 +08:00
    mgcnrx11
    mgcnrx11
    Aug 25, 2014
    1
    这个,其实就是写个parser。

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

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

    当然,其实LZ直接找个工具把JSON转为Object就可以了
    starsoi
    starsoi
    Aug 25, 2014
    5
    直接用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
    mhycy
    Aug 25, 2014
    6
    ....随便找个对JSON友好的语言解码一下重新生成数据不就完了
    Python JS PHP 随便选啊
    meteor2013
    meteor2013
    OP
    Aug 25, 2014
    7
    @mhycy 这个办法听起来比较愉快。
    kisshere
    kisshere
    Aug 25, 2014
    8
    为啥不用json_decode函数生成array,再遍历数组存入mysql
    sheaven
    sheaven
    Aug 25, 2014
    9
    如果可以存mongodb更方便
    hepin1989
    hepin1989
    Aug 25, 2014
    10
    里面那个取的话,比如以play-json为列,就是val userNode = jsonvalue \ "user",
    如果用jsonnode的话,就是 JsonNode userNode = jsonvalue.getNode("user")

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

    php
    json_decode(...)


    python

    import json
    json.loads(...)

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


    嵌套的user 放到user表里不就行了?
    hzz780
    hzz780
    Aug 26, 2014
    16
    我觉得,不论用什么,json都有自己的格式,key-value,如果是自己写,暴力点,对每一层进行判断,{ "key1":"value","key2":[{}{}] }按顺序遍历,然后检查是否有儿子没有的话直接进数据库,,有的话进去,一步一步的加数据库啰……码农渣,勿喷。
    withinthefog
    withinthefog
    Aug 26, 2014
    17
    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节点....
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2090 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 15:12 · PVG 23:12 · LAX 07:12 · JFK 10:12
    ♥ Do have faith in what you're doing.