C# 解析嵌套的json文件.
概述
今天我同学问我如何转换json文件,没处理过,网上搜了一下,json转excel的很少,反过来倒是有许多人写了工具.
json文件的结构大致是这样的:
{"votes": {"funny": , "useful": , "cool": }, "user_id": "CR2y7yEm4X035ZMzrTtN9Q", "name": "Jim", "average_stars": 5.0, "review_count": , "type": "user"}
{"votes": {"funny": , "useful": , "cool": }, "user_id": "_9GXoHhdxc30ujPaQwh6Ew", "name": "Kelle", "average_stars": 1.0, "review_count": , "type": "user"}
{"votes": {"funny": , "useful": , "cool": }, "user_id": "8mM-nqxjg6pT04kwcjMbsw", "name": "Stephanie", "average_stars": 5.0, "review_count": , "type": "user"}
{"votes": {"funny": , "useful": , "cool": }, "user_id": "Ch6CdTR2IVaVANr-RglMOg", "name": "T", "average_stars": 5.0, "review_count": , "type": "user"}
{"votes": {"funny": , "useful": , "cool": }, "user_id": "NZrLmHRyiHmyT1JrfzkCOA", "name": "Beth", "average_stars": 1.0, "review_count": , "type": "user"}
{"votes": {"funny": , "useful": , "cool": }, "user_id": "mWx5Sxt_dx-sYBZg6RgJHQ", "name": "Amy", "average_stars": 3.79, "review_count": , "type": "user"}
{"votes": {"funny": , "useful": , "cool": }, "user_id": "hryUDaRk7FLuDAYui2oldw", "name": "Beach", "average_stars": 3.8300000000000001, "review_count": , "type": "user"}
{"votes": {"funny": , "useful": , "cool": }, "user_id": "2t6fZNLtiqsihVmeO7zggg", "name": "christine", "average_stars": 3.0, "review_count": , "type": "user"}
{"votes": {"funny": , "useful": , "cool": }, "user_id": "mn6F-eP5WU37b-iLTop2mQ", "name": "Denis", "average_stars": 4.5, "review_count": , "type": "user"}
我定义一个类(User),用于构造json文件对应的每行(每行对应一个User对象).
然后定义一个UserManager类去处理,返回一个List<User>,完整代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; using Json_User; namespace Json_User {
//对应json每行.
public class User {
public Votes votes { get; private set; } public string user_id { get; private set; } public string name { get; private set; } public double average_stars { get; private set; } public int review_count { get; private set; } public string type { get; private set; } public User(Votes votes, string user_id, string name, double average_stars, int review_count, string type) {
this.votes = votes;
this.user_id = user_id;
this.name = name;
this.average_stars = average_stars;
this.review_count = review_count;
this.type = type;
}
} public class Votes {
public int funny { get; private set; } public int useful { get; private set; } public int cool { get; private set; } public Votes(int funny, int useful, int cool) {
this.funny = funny;
this.useful = useful;
this.cool = cool;
}
} //处理类.
static class UserManager {
/// <summary>
/// 解析嵌套的json.如:"{"votes": {"funny": 0, "useful": 7, "cool": 0}, "user_id": "CR2y7yEm4X035ZMzrTtN9Q", "name": "Jim", "average_stars": 5.0, "review_count": 6, "type": "user"}"
/// </summary>
/// <param name="lines">没行代表一个User</param>
/// <returns></returns>
public static List<User> ParseJSONString(string[] lines) {
System.Web.Script.Serialization.JavaScriptSerializer ser = new System.Web.Script.Serialization.JavaScriptSerializer();
Dictionary<string, object> userDic = null; List<User> users = new List<User>(lines.Length);
User u = null;
Votes v = null; //为成员变量赋值.
int funny;
int useful;
int cool;
string user_id;
string name;
double average_stars;
int review_count;
string type;
foreach (string item in lines) {
//User.
userDic = ser.Deserialize<Dictionary<string, object>>(item); //User中的votes成员变量.
Dictionary<string, object> votesDic = (Dictionary<string, object>)userDic["votes"]; funny = int.Parse(votesDic["funny"].ToString());
useful = int.Parse(votesDic["useful"].ToString());
cool = int.Parse(votesDic["cool"].ToString());
v = new Votes(funny, useful, cool); user_id = userDic["user_id"].ToString();
name = userDic["name"].ToString();
average_stars = double.Parse(userDic["average_stars"].ToString());
review_count = int.Parse(userDic["review_count"].ToString());
type = userDic["type"].ToString(); u = new User(v, user_id, name, average_stars, review_count, type);
users.Add(u);
}
return users;
} // remove "this" if not on C# 3.0 / .NET 3.5
public static System.Data.DataTable ConvertToDatatable<T>(this IList<T> data) {
System.ComponentModel.PropertyDescriptorCollection props =
System.ComponentModel.TypeDescriptor.GetProperties(typeof(T));
System.Data.DataTable table = new System.Data.DataTable();
for (int i = ; i < props.Count; i++) {
System.ComponentModel.PropertyDescriptor prop = props[i];
table.Columns.Add(prop.Name, prop.PropertyType);
}
object[] values = new object[props.Count];
foreach (T item in data) {
for (int i = ; i < values.Length; i++) {
values[i] = props[i].GetValue(item);
}
table.Rows.Add(values);
}
return table;
}
}
}
C# 解析嵌套的json文件.的更多相关文章
- Unity的Json解析<二>–写Json文件
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/50378805 作者:car ...
- Unity的Json解析<一>--读取Json文件
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/50373558 作者:car ...
- 实例解析嵌套的JSON格式数据
关于JSON数据格式的基本知识和概念,参看: http://www.cnblogs.com/zouzf/archive/2012/03/31/2426646.html <span style=& ...
- Cocos2dx&Lua - UI显示优化之怎样解决解析大量json文件
GUIReader中有个widgetFromJsonFile的方法,此方法是用于解析json文件(cocostudio生成的UI的)并返回该文件的父节点(Widget),然后便于进一步的UI操作(如获 ...
- iOS 如何用JSONKit读写JSON文件
如何用JSONKit读写JSON文件 分类: ios2013-04-20 12:46 510人阅读 评论(0) 收藏 举报 JSON文件格式简单,使用方便,值得一用. 目前已经有多个库支持Json文 ...
- $Java-json系列(二):用JSONObject解析和处理json数据
本文中主要介绍JSONObject处理json数据时候的一些常用场景和方法. (一)jar包下载 所需jar包打包下载百度网盘地址:https://pan.baidu.com/s/1c27Uyre ( ...
- 用JSONObject解析和处理json数据
(一)jar包下载 所需jar包打包下载百度网盘地址:https://pan.baidu.com/s/1c27Uyre (二)常见场景及处理方法 1.解析简单的json字符串: 1 // 简单的jso ...
- 在 Node.js 中处理大 JSON 文件
在 Node.js 中处理大 JSON 文件 场景描述 问题一: 假设现在有一个场景,有一个大的 JSON 文件,需要读取每一条数据经过处理之后输出到一个文件或生成报表数据,怎么能够流式的每次读取一条 ...
- C#解析json文件的方法
C# 解析 json JSON(全称为JavaScript Object Notation) 是一种轻量级的数据交换格式.它是基于JavaScript语法标准的一个子集. JSON采用完全独立于语言的 ...
随机推荐
- jquery中attr、prop、data
在高版本的jquery中获取标签的属性,可以使用attr().prop().data(),那么这些方法有什么区别呢? 对于HTML元素本身就带有的固有属性,在处理时,使用prop方法. 对于HTML元 ...
- FileZilla 无法保存密码
当保存密码时遇到这个问题时: 解决办法: 一.找到FileZilla的设置: 二.点击"界面",取消勾选"不要保存密码",点击"确定"按钮, ...
- mysql中的JOIN用法总结
join是mysql中一个基础的关键词,一般在多表连接查询中使用,这里做一下总结 1.JOIN的语法格式 table_references: table_reference [, table_refe ...
- Python3 如何优雅地使用正则表达式(详解四)
更多强大的功能 到目前为止,我们只是介绍了正则表达式的一部分功能.在这一篇中,我们会学习到一些新的元字符,然后再教大家如何使用组来获得被匹配的部分文本. 更多元字符 还有一些元字符我们没有讲到,接下来 ...
- 文件磁盘读写类CArchive类
CArchive类的成员 数据成员 m_pDocument 指向被串行化的CDocument对象 构造函数 Carchive 创建一个Carhcive对象 Abort在不异常的情况下,关闭归档文件 C ...
- 自己动手开发编译器(五)miniSharp语言的词法分析器
稍微说明一点,整型常量和上面的标识符的词法,在调用lex.DefineToken时都多传了一个参数.这个参数是可选的描述信息,如果不传会直接使用正则表达式的字符串形式.而标识符的正则表达式有4万多个字 ...
- Spark学习笔记--Graphx
浅谈Graphx: http://blog.csdn.net/shangwen_/article/details/38645601 Pregel: http://blog.csdn.net/shang ...
- WPC文件修改还原pin进度
原文地址:http://wenku.baidu.com/link?url=KZRR6VtW_Yn59iEbrWYz15jOH6hSVgjyow8nvwHfQr3eQgvCcc9IgYCT-fWwVWf ...
- /usr/lib64/python2.6/site-packages/pycurl.so: undefined symbol: CRYPTO_set_locking_callback
[root@frontend01 yum.repos.d]# cd /etc/yum.repos.d;wget http://rpms.adiscon.com/v8-stable/rsyslog.re ...
- CSS常用操作-对齐
index.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &l ...