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

2014-08-25 20:40:57 +08:00
 meteor2013

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}

5522 次点击
所在节点    Python
17 条回复
mgcnrx11
2014-08-25 20:52:36 +08:00
这个,其实就是写个parser。

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

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

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

不难的哈
Biwood
2014-08-25 23:28:38 +08:00
不知道为什么要分开存储,{}套括号套{}不正是JSON特色嘛,如果在Javascript里面,操作起来简直是得心应手,要获取用户id就直接data.user.id,这样解析起来还蛋疼吗
chigco
2014-08-26 00:09:39 +08:00
好像没怎么难啊。转换成对象,做关联。
Mutoo
2014-08-26 00:12:59 +08:00
看这场景,应该是 mongodb 的活儿。
ffffwh
2014-08-26 04:50:46 +08:00
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
2014-08-26 10:28:57 +08:00
我觉得,不论用什么,json都有自己的格式,key-value,如果是自己写,暴力点,对每一层进行判断,{ "key1":"value","key2":[{}{}] }按顺序遍历,然后检查是否有儿子没有的话直接进数据库,,有的话进去,一步一步的加数据库啰……码农渣,勿喷。
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节点....

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/129848

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX