概述

  今天我同学问我如何转换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. 利用shell脚本函数实现网络连通性的检测

    通常情况下,linux系统网络连通性的检测有两种方法: 1.通过“ping指令 + 目标IP” 或者 “ping指令 + 目标IP域名” 注意针对IPv6地址的IP网络检测需要试用ping6,同时pi ...

  2. 在Ubuntu14.04下安装运行Unity-tweak-tool报错scheme missing的解决办法

    问题: 安装完unity-tweak-tool后,打开运行弹出出错窗口,忘了截图了,提示内容: scheme missing! Error: schema com.canonical.indicato ...

  3. recovery编译汉化

    当BoardConfig.mk中定义了recovery的字体且为中文字体时,自动编译为中文版,否则编译为英文版 例如: BOARD_USE_CUSTOM_RECOVERY_FONT := \" ...

  4. BZOJ3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛

    3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 30  Solved: 17[Sub ...

  5. 高德JAVA笔试题

    1.常用的RuntimeException. 2.叙述RuntimeException和一般异常的异同. 3.叙述ArrayList.Vector和LinkedList各自的特点和特性. 4.什么是反 ...

  6. ORA-00314,redolog 损坏,或丢失处理方法

    alertsid.log报错信息: Fri Sep 27 15:18:39 2013 Started redo scan Fri Sep 27 15:18:39 2013 Errors in file ...

  7. javascript 中 nodeValue 、value 、text 的区别

     nodeValue: 属性设置或者返回某节点的值: 也可以改变某个文本节点的值, node.nodeValue eg: 如何获取p元素里面的文本内容 <p id="demo" ...

  8. Python读取txt文件

    Python读取txt文件,有两种方式: (1)逐行读取 data=open("data.txt") line=data.readline() while line: print ...

  9. JS-事件处理

    1.一个简单的单击事件: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  10. SEO名词_黒帽SEO

    一.什么是黒帽SEO 黑帽SEO是指通过一些操控和欺骗找寻搜索引擎漏洞的一些技术,让关键词排名在很短的时间获得非常好的排名的一项技术 二.黒帽SEO的危害 如果被搜索引擎识别网站采用的是黑帽SEO手段 ...