using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Web;
using System.IO;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq; namespace DAL{
public class JsonHelper {
public static byte[] ToArray(object o) {
return Encoding.UTF8.GetBytes(ToJsonString(o));
}
public static string ToJsonString(object o) {
JsonSerializer ser = new JsonSerializer();
StringWriter write = new StringWriter();
ser.Serialize(write, o);
return write.GetStringBuilder().ToString();
} public static string BuffToText(byte[] buf, int offset, int length) {
return Encoding.UTF8.GetString(buf, offset, length);
}
public static string BuffToText(byte[] buf) {
return Encoding.UTF8.GetString(buf);
}
public static string BytesToText(byte[] buf, int index, int len) {
return Encoding.UTF8.GetString(buf, index, len);
}
public static void toJson<T>(string key, T v, StringBuilder builder) {
JSON.SerializeString(key, builder);
builder.Append(":");
if (v is string) {
JSON.SerializeString(v as string, builder);
}
else {
builder.Append(v.ToString());
}
}
public static void toFirstJson<T>(string key, T v, StringBuilder builder) {
builder.Append("{");
toJson(key, v, builder);
}
public static void toMiddleJson<T>(string key, T v, StringBuilder builder) {
builder.Append(",");
toJson(key, v, builder);
}
public static void toLastJson<T>(string key, T v, StringBuilder builder) {
toMiddleJson(key, v, builder);
builder.Append("}");
}
public static string toJson(Dictionary<string, object> dict) {
StringBuilder builder = new StringBuilder();
toJson(dict, builder);
return builder.ToString();
}
public static void toJson(Dictionary<string, object> dict, StringBuilder builder) {
builder.Append("{");
bool first = true;
foreach (KeyValuePair<string, object> kv in dict) {
if (first == false)
builder.Append(",");
else
first = false;
JSON.SerializeString(kv.Key, builder);
builder.Append(":");
if (kv.Value is string) {
JSON.SerializeString((string)kv.Value, builder);
}
else if (kv.Value is int) {
builder.Append(kv.Value.ToString());
}
else {
JSON.SerializeString(kv.Value.ToString(), builder);
}
}
builder.Append("}");
} public static string ObjectToJson(object item) {
using (MemoryStream ms = ObjectToJsonStream(item)) {
StringBuilder sb = new StringBuilder();
sb.Append(Encoding.UTF8.GetString(ms.ToArray()));
return sb.ToString();
}
}
public static MemoryStream ObjectToJsonStream(object item) {
DataContractJsonSerializer serializer = new DataContractJsonSerializer(item.GetType());
MemoryStream ms = new MemoryStream();
serializer.WriteObject(ms, item);
return ms;
}
public static T JsonToObject<T>(string jsonString) {
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString))) {
T jsonObject = (T)ser.ReadObject(ms);
return jsonObject;
}
}
public static T BuffToObject<T>(byte[] buff) {
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
using (MemoryStream ms = new MemoryStream(buff)) {
T jsonObject = (T)ser.ReadObject(ms);
return jsonObject;
}
}
public static T JsonToObject<T>(Stream ms) {
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
T jsonObject = (T)ser.ReadObject(ms);
return jsonObject;
} public static JToken ToJson(string str) {
return JToken.Parse(str);
}
public static JToken ToJson(byte[] buf) {
var str = Encoding.UTF8.GetString(buf);
return JToken.Parse(str);
}
public static JToken ToJson(Stream ms) {
var m = ms as MemoryStream;
if (m == null) {
m = new MemoryStream();
ms.CopyTo(m);
}
return ToJson(m.ToArray());
} public static byte[] ObjectToBytes(object o) {
return Encoding.UTF8.GetBytes(ObjectToJsonString(o));
}
public static string ObjectToJsonString(object o) {
return JsonConvert.SerializeObject(o);
}
public static T BytesToObjectT<T>(byte[] buf) {
return JsonConvert.DeserializeObject<T>(Encoding.UTF8.GetString(buf));
}
public static T ParseStream<T>(Stream ms) {
var s = new MemoryStream();
ms.CopyTo(s);
return BytesToObjectT<T>(s.ToArray());
}
public static T ParseStr<T>(string tx) {
return JsonConvert.DeserializeObject<T>(tx);
}
public static T ParseBuf<T>(byte[] buf) {
return JsonConvert.DeserializeObject<T>(Encoding.UTF8.GetString(buf));
}
public static Dictionary<string, T> ToDict<T>(JObject json) {
Dictionary<string, T> d = new Dictionary<string, T>();
foreach (KeyValuePair<string, JToken> kv in json) {
d[kv.Key] = TokenToT<T>(kv.Value);
}
return d;
}
public static T[] ArrayToT<T>(JToken a) {
List<T> list = new List<T>();
foreach (JToken m in a) {
list.Add(TokenToT<T>(m));
}
return list.ToArray();
}
private static JValue EnsureValue(JToken value) {
if (value == null)
throw new ArgumentNullException("value"); if (value is JProperty)
value = ((JProperty)value).Value; JValue v = value as JValue; return v;
}
public static T TokenToT<T>(JToken a) {
JValue v = EnsureValue(a);
return (T)(v.Value);
}
public static object ParseToObject(byte[] buff) {
string txt = Encoding.UTF8.GetString(buff);
try {
var v = JToken.Parse(txt);
return v;
//JObject o = J.Parse(txt);
//return o;
}
catch {
}
JArray oo = JArray.Parse(txt);
return oo;
}
public static Stream ToStream(object o) {
var str = JsonConvert.SerializeObject(o);
var buf = Encoding.UTF8.GetBytes(str);
return new MemoryStream(buf);
}
public static string ToStr(object o) {
return JsonConvert.SerializeObject(o);
}
public static byte[] ToBuf(object o) {
var str = JsonConvert.SerializeObject(o);
return Encoding.UTF8.GetBytes(str);
}
}
}

  

JSON数据的各种操作的更多相关文章

  1. Java操作JSON数据(3)--fastjson操作JSON数据

    fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean.本文介绍下fastjs ...

  2. Java操作JSON数据(2)--Gson操作JSON数据

    Gson是Google公司发布的一个开发源码的Java库,可用于将Java对象转换为JSON字符串,也可用于将JSON字符串转换为对应的Java对象.本介绍下Gson的基本使用方法,包括序列化和反序列 ...

  3. Java操作JSON数据(1)--JSON-lib操作JSON数据

    JSON-lib是一个java库,用于将bean.映射.集合.java数组和XML转换为JSON,或将JSON转为beans和DynaBeans.JSON-lib最后的版本是2.4,更新时间是2010 ...

  4. json数据的jquery操作和asp.net后台操作

    jquery操作 json对象创建 var item0={"a":"val1","b":"val2"}; json对象字 ...

  5. JSON相关知识,转载:删除JSON中数组删除操作

    一:JSON是什么 JSONg格式:对象是一个无序的“名称/值”对的集合. 对象以括号开始,括号结束. 名称冒号分隔值. "名称/值"之间用逗号分隔 例: var people = ...

  6. python 读写json数据

    json 模块提供了一种很简单的方式来编码和解码JSON 数据. 字符串操作 其中两个主要的函数是json.dumps() 和json.loads() ,要比其他序列化函数库如pickle 的接口少得 ...

  7. 使用jackson解析JSON数据

    本文介绍使用jackson来对json数据进行解析操作 首先,需要去官网下载jackson,本文使用的是(jackson-all-1.9.11.jar) 主要通过ObjectMapper对json进行 ...

  8. C++解析Json,使用JsonCpp读写Json数据

    JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.通常用于数据交换或存储. JsonCpp是一个基于C++语言的开源库,用于C++程序的J ...

  9. js之操作JSON数据

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意 ...

随机推荐

  1. 纸壳CMS主题增强,支持主题中加入模板

    背景 在之前,纸壳CMS的主题仅仅只是CSS样式,并不支持在主题下使用模板来构建不同的HTML结构.现在我们对主题功能做了增强,可以在主题下添加各自的模板,这样在制作主题时,就会更加自由.不仅如此,新 ...

  2. golang简单实现jwt验证(beego、xorm、jwt)

    程序目录结构 简单实现,用户登录后返回一个jwt的token,下次请求带上token请求用户信息接口并返回信息. app.conf文件内容(可以用个beego直接读取里面的内容)写的是一个jwt的se ...

  3. 【Vue】浅谈Vue不同场景下组件间的数据交流

    浅谈Vue不同场景下组件间的数据“交流”   Vue的官方文档可以说是很详细了.在我看来,它和react等其他框架文档一样,讲述的方式的更多的是“方法论”,而不是“场景论”,这也就导致了:我们在阅读完 ...

  4. Lerning Entity Framework 6 ------ Defining the Database Structure

    There are three ways to define the database structure by Entity Framework API. They are: Attributes ...

  5. Java-String类型的参数传递问题

    刚才看见一个兄弟在为Java的String传值/传引用问题困惑,翻箱倒柜找到了这篇我很久以前写的文章,发在这里,希望能对迷惑的朋友有些帮助. 提要:本文从实现原理的角度上阐述和剖析了:在Java语言中 ...

  6. JS实现网页背景旋转缩放轮播效果

    实现效果:效果预览 css代码: .switch_images { display: inline-block; margin:; padding:; width: 100%; height: 100 ...

  7. java环境的配置与安装(windows、macos、linux)

    一.windows下: 1.下载jdk:https://www.oracle.com2.安装教程:https://www.cnblogs.com/zlslch/p/5658399.html 二.mac ...

  8. [Spring]IOC控制反转和DI依赖注入

    从之前算起到现在接触Spring也已经有几天了,进度也不是很快,就只弄懂了控制反转和依赖注入那么一点东西.然后敲了两个demo 主要是因为之前没有学过,然后网上资源很多但是都不是面向我们初学者的,大多 ...

  9. VS2017中使用Git进行版本控制

    简单介绍在VS2015下使用Git来管理项目 1. VS2017启用Git源代码管理插件 第一步,打开vs: 第二步,打开[团队资源管理器]: 第三步,选择团队管理器选项卡下的[连接]页面,点击[克隆 ...

  10. JVM 监控工具 jstack 和 jvisualvm 的使用

    Java线程状态 线程的五种状态 * 新建:new(时间很短) * 运行:runnable * 等待:waitting(无限期等待),timed waitting(限期等待) * 阻塞:blocked ...