概述

  今天我同学问我如何转换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文件.的更多相关文章

  1. Unity的Json解析<二>–写Json文件

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/50378805 作者:car ...

  2. Unity的Json解析<一>--读取Json文件

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/50373558 作者:car ...

  3. 实例解析嵌套的JSON格式数据

    关于JSON数据格式的基本知识和概念,参看: http://www.cnblogs.com/zouzf/archive/2012/03/31/2426646.html <span style=& ...

  4. Cocos2dx&amp;Lua - UI显示优化之怎样解决解析大量json文件

    GUIReader中有个widgetFromJsonFile的方法,此方法是用于解析json文件(cocostudio生成的UI的)并返回该文件的父节点(Widget),然后便于进一步的UI操作(如获 ...

  5. iOS 如何用JSONKit读写JSON文件

     如何用JSONKit读写JSON文件 分类: ios2013-04-20 12:46 510人阅读 评论(0) 收藏 举报 JSON文件格式简单,使用方便,值得一用. 目前已经有多个库支持Json文 ...

  6. $Java-json系列(二):用JSONObject解析和处理json数据

    本文中主要介绍JSONObject处理json数据时候的一些常用场景和方法. (一)jar包下载 所需jar包打包下载百度网盘地址:https://pan.baidu.com/s/1c27Uyre ( ...

  7. 用JSONObject解析和处理json数据

    (一)jar包下载 所需jar包打包下载百度网盘地址:https://pan.baidu.com/s/1c27Uyre (二)常见场景及处理方法 1.解析简单的json字符串: 1 // 简单的jso ...

  8. 在 Node.js 中处理大 JSON 文件

    在 Node.js 中处理大 JSON 文件 场景描述 问题一: 假设现在有一个场景,有一个大的 JSON 文件,需要读取每一条数据经过处理之后输出到一个文件或生成报表数据,怎么能够流式的每次读取一条 ...

  9. C#解析json文件的方法

    C# 解析 json JSON(全称为JavaScript Object Notation) 是一种轻量级的数据交换格式.它是基于JavaScript语法标准的一个子集. JSON采用完全独立于语言的 ...

随机推荐

  1. 32位和64位adb下载及安装

    一.已安装android sdk时 1.拷贝 从%ANDROID_HOME/platform-tools 下拷贝如下文件到/System32和/SysWOW64下即可. adb.exe AdbWinA ...

  2. JavaScript获取Select下拉框Option的Value和Text值的方法

    Js获取select下拉列表框各个Option的Value值相对比较容易,不过获取Text值却有点麻烦,对于一个初学JavaScript的 新手来说,可能一时还无从下手,那么就请看下本文的方法,以一个 ...

  3. 微星b85(b85i b85-gaming) 系列dsdt

    从网友得了一个b85-gaming 的dsdt,发现跟我的b85i的dsdt错误都是一样的. 发布上来给需要的人参考. 微星这个系列的dsdt不能用dsdt editor的fix功能,不然文件会越来越 ...

  4. 【学习笔记】【oc】类和对象及类的三大基本特征

    1.类和对象 类是抽象化,对象是具体化. (1)定义类: 分为两个步骤,类的声明:定义类的成员变量和方法:@interface 用于声明定义类的接口部分,@end表面定义结束:. 成员变量的定义:{} ...

  5. Swift— Swift编码规范之命名规范-备

    程序代码中到处都是自己定义的名字,取一个有样并且符合规范的名字非常重要. 命名方法很多,但是比较有名的,广泛接受命名法有: 匈牙利命名,一般只是命名变量,原则是:变量名=类型前缀+描述,如bFoo表示 ...

  6. 关于51单片机P0口的结构及上拉问题

    1.P0作为地址数据总线时,V1和V2是一起工作的,构成推挽结构.高电平时,V1打开,V2截止:低电平时,V1截止,V2打开.这种情况下不用外接上拉电阻.而且,当V1打开,V2截止,输出高电平的时候, ...

  7. python通过代理刷网页点击量

    python通过代理刷网页点击量 更新异常处理情况 @time 2013-0803 更新循环里计数问题和随机等待时间问题 #!/usr/bin/python #-*- coding:utf-8 -*- ...

  8. 【转】android使用File Explorer无法访问系统内部文件--不错

    原文网址:http://blog.csdn.net/yangqicong11/article/details/8747042 设备:Samsung GT-P3110 系统:Android 4.1.1 ...

  9. HDU_1009——老鼠的交易,性价比排序,最大化收益

    Problem Description FatMouse prepared M pounds of cat food, ready to trade with the cats guarding th ...

  10. HDU_2022——海选女主角

    Problem Description potato老师虽然很喜欢教书,但是迫于生活压力,不得不想办法在业余时间挣点外快以养家糊口.“做什么比较挣钱呢?筛沙子没力气,看大门又不够帅...”potato ...