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采用完全独立于语言的 ...
随机推荐
- tribonacci
Everybody knows Fibonacci numbers, now we are talking about the Tribonacci numbers: T[0] = T[1] = T[ ...
- CC Arithmetic Progressions (FFT + 分块处理)
转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove 题目:给出n个数,选出三个数,按下标顺序形成等差数 ...
- nuc950支持nand的mtd驱动的kernel修改
支持nand的mtd驱动的kernel修改 一.更新nanddriver文件 将新的nanddriver文件nuc900_nand.c放到kernel的drivers/mtd/nand目录下 二.修改 ...
- Nginx log
ngx_http_log_module 模块通过指定的格式把请求写入日志.请求登陆到location处理结束的环境中.如果重定向发生在请求处理过程中,这或许与location原理不同. Example ...
- image转文件
UIImage *image = self.imageCompainPhoto.image; NSData *imageData = UIImagePNGRepresentation(image); ...
- 复制、移动和删除:cp, rm, mv
要复制文件,请使用cp(copy)命令.不过,cp命令的用途很多.除了单纯的复制之外,还可以建立连接文件(就是快捷方式),比较两个文件的新旧而予以更新,以及复制整个目录等等.至于移动目录与文件,则使用 ...
- xheditor在线编辑器的使用
在你所需要在线编辑器的工程目录下,导入xheditor_emot.xheditor_plugins和xheditor_skin.jquery四个文件夹,然后在textarea标签中加入: class= ...
- Git 初始化配置
先给大家推荐个很不错的GIT学习资料:廖雪峰 <Git简介> http://www.liaoxuefeng.com/wiki/0013739516305929606dd183612485 ...
- mysql 日期比较
情景是:距离当前到期时间多少天 可以考虑当前系统时间加上某个天数后,与数据库的字段作比较 1.已知的时间>=CURDATE()+10 2.在数据的查询中,考虑到sql语句的优化问题,应减少通配符 ...
- How systems researchers build systems
Define the problem >>Identify the constraints and abstract problem propose solution:simple ide ...