文档章节

C# VB .NET 解析 JSON

f
 fesugar
发布于 2016/10/14 13:58
字数 641
阅读 346
收藏 0

如何在 .NET 程序中解析 JSON

 

使用 Newtonsoft.Json 第三方类来操纵

Newtonsoft.Json 是.NET 下开源的json格式序列号和反序列化的类库

官方网站: http://json.codeplex.com/

 

Imports System.Text.RegularExpressions
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
''' <summary>
''' json序列化
''' </summary>
Public Class json
    ''' <summary>
    ''' 解析JSON数据
    ''' </summary>
    ''' <param name="empData">源数据</param>
    ''' <param name="key">指定值下的数据,可省略。</param>
    ''' <returns>0 非 json 数据</returns>
    Public Shared Function JsonDecode(ByVal empData, Optional ByVal key1 = Nothing, Optional ByVal key2 = Nothing, Optional ByVal arry_i = Nothing) As String
        Try
            If IsJson(empData) = False Then Return 0

            If arry_i IsNot Nothing Then
                'http://blog.csdn.net/goodelephant/article/details/24769421
                Return CType(JsonConvert.DeserializeObject(empData), JObject)(key1)(arry_i)(key2).ToString()   '这个是解析数组  下标。。
            End If


            If key1 = Nothing Then Return CType(JsonConvert.DeserializeObject(empData), JObject).ToString

            If key2 = Nothing Then Return CType(JsonConvert.DeserializeObject(empData), JObject)(key1).ToString()

            Return CType(JsonConvert.DeserializeObject(empData), JObject)(key1)(key2).ToString()


        Catch ex As Exception
            Return ex.Message
        End Try
    End Function

    ''' <summary>
    ''' 序列化 json
    ''' </summary>
    ''' <param name="str">对象</param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function JsonEncode(ByVal str As Object) As String
        Try
            Return JsonConvert.SerializeObject(str)
        Catch ex As Exception
            Return ex.Message
        End Try
    End Function


    Public Shared Function JsonSerializeMore_HttpJson(ByVal code As String, ByVal msg As String, Optional ByVal data As Object = Nothing)
        'http://bbs.csdn.net/topics/390910345
        'http://www.cnblogs.com/08shiyan/p/3464028.html
        '  Dim cusList As New List(Of httpjson)()
        'Dim cusList As New List(Of HttpJson)

        'cusList.Add(New HttpJson("6902083881405", "娃哈哈饮用纯净水", ""))
        'cusList.Add(New HttpJson("6902083893736", "娃哈哈营养快线原味"))

        'Dim dic As Dictionary(Of String, HttpJson) = New Dictionary(Of String, HttpJson)
        'dic.Add("1", New HttpJson("1", "2", 1.1))

        ''dic.Add("2222", New HttpJson("1", "2", 1.1))
        '' dic.Add("3333", New HttpJson("1", "2", 1.1))
        'Dim jsonStr As String = Newtonsoft.Json.JsonConvert.SerializeObject(dic)
        'MsgBox(jsonStr)


        'MsgBox(JsonConvert.SerializeObject(cusList))


        Return JsonEncode(New HttpJson(code, data))



    End Function



    ''' <summary>
    ''' json转换datatable
    ''' </summary>
    ''' <param name="strJson"></param>
    ''' <returns>返回 0  非json 数据</returns>
    Public Shared Function JsonToDataTable(ByVal strJson As String) As DataTable

        Dim rg As New Regex("(?<={)[^:]+(?=:\[)", RegexOptions.IgnoreCase)
        Dim strName As String = rg.Match(strJson).Value
        Dim dt As DataTable = Nothing
        strJson = strJson.Substring((strJson.IndexOf("[") + 1))
        strJson = strJson.Substring(0, strJson.IndexOf("]"))
        Dim matchs As MatchCollection = New Regex("(?<={)[^}]+(?=})").Matches(strJson)
        Dim i As Integer
        For i = 0 To matchs.Count - 1
            Dim strRow As String = matchs(i).Value
            Dim strRows As String() = Split(strRow, ",")

            If (dt Is Nothing) Then
                dt = New DataTable
                dt.TableName = strName
                For Each str As String In strRows
                    Dim dc As New DataColumn
                    Dim strCell As String() = Split(str, ":")
                    dc.ColumnName = strCell(0).Replace("""", "")
                    dc.ColumnName = Trim(dc.ColumnName.Replace(Chr(13), ""))
                    dc.ColumnName = Trim(dc.ColumnName.Replace(Chr(10), ""))
                    dt.Columns.Add(dc)
                Next
                dt.AcceptChanges()
            End If

            Dim dr As DataRow = dt.NewRow()

            For j As Integer = 0 To strRows.Length - 1
                dr(j) = Trim(strRows(j).Split(":")(1).Replace("""", ""))
            Next j
            dt.Rows.Add(dr)
            dt.AcceptChanges()
        Next i
        Return dt
    End Function

    ''' <summary>
    ''' 验证是否 JSON 数据
    ''' </summary>
    ''' <param name="input"></param>
    ''' <returns></returns>
    Public Shared Function IsJson(ByVal input As String) As Boolean

        If input = "" Then Return False '为空字符时会出现异常,这里直接返回,不进行检测
        input = input.Trim
        Return ((input.StartsWith("{") AndAlso input.EndsWith("}")) OrElse (input.StartsWith("[") AndAlso input.EndsWith("]")))
    End Function



End Class
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string jsonstr = "json 待解析的字符";

            MessageBox.Show(

                ((Newtonsoft.Json.Linq.JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(jsonstr))["data"]["name"].ToString()

                );

        }


    }
}

本文转载自:http://www.fesugar.com/wp/832.html

f
粉丝 0
博文 7
码字总数 1816
作品 0
宿迁
私信 提问
.NET的数学库NMath实用教程——创建复数的几种方法

NMath是一个适用于所有.NET语言,如C#、Visual Basic、F#和.NET的数学库,它包含了.NET平台上的面向对象数字计算的基础类。我们将以连载的形式向大家介绍NMath的实用教程,有任何建议或提示...

ymy_666666
01/15
4
0
ReSharper 2016.1更新说明完整版

一段话看完全篇: ReSharper 2016.1改进了Code Style功能;新增多个新的contextactions和quick-fixes;新增支持VB.NET 14,JSON和Node.js;在本地运行xUnit测试;帮助确保转义字符的正确性;将...

百mumu
2016/05/06
66
0
C# 最佳工具集合: IDE 、分析、自动化工具等

原文出处:Sweet-Tang C#是企业中广泛使用的编程语言,特别是那些依赖微软的程序语言。如果您使用C#构建应用程序,则最有可能使用Visual Studio,并且已经寻找了一些扩展来对您的开发进行管理...

Sweet-Tang
2017/09/11
0
0
CodeMaid 代码女仆 简体中文 10.4.77 发布

CodeMaid 是一个开源的 Visual Studio 扩展, 用来清理和简化你的 C#, C++, F#, VB, PHP, PowerShell, JSON, XAML, XML, ASP, HTML, CSS, LESS, SCSS, JavaScript 和TypeScript 的代码以及编......

麦壳饼
2018/03/01
4K
16
VB.NET / C# 遍历列出目录下所有文件

VB.NET / C# 遍历列出目录下所有文件 Forece Blog2017-09-2115 阅读 c#VB遍历VB.net VB.NET / C# 遍历列出目录下所有文件 VB 代码...

Forece Blog
2017/09/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

[转] Java 无界阻塞队列 DelayQueue 入门实战

原文出处:http://cmsblogs.com/ 『chenssy』 DelayQueue是一个支持延时获取元素的无界阻塞队列。里面的元素全部都是“可延期”的元素,列头的元素是最先“到期”的元素,如果队列里面没有元...

泥瓦匠BYSocket
13分钟前
4
0
zk中集群版中角色和消息类型

服务器角色 LEADER LEARNER FOLLOWING OBSERVER 消息类型 数据同步 服务器初始化 请求处理型 会话管理型 LEADER 集群工作核心,作用有: 1事务请求唯一调度和处理者,保证事务处理顺序性 2集...

writeademo
14分钟前
3
0
阿里云推送的基本使用-Swift;iOS10+

func initCloudPush(){ CloudPushSDK.asyncInit("*****", appSecret: "*******") { (result) in if result!.success{ print("deviceId===......

west_zll
26分钟前
3
0
分布式及高可用元数据采集原理

转载本文需注明出处:微信公众号EAWorld,违者必究。 引言: 元数据采集是元数据产品的核心部分,如何提升采集效率是需要仔细斟酌的事情,既要保持稳定性也要保持跟上主流技术的发展趋势。元...

EAWorld
41分钟前
4
0
为构建社交关系链手淘都做了啥?

作者|王卫(泓冰) 出品|阿里巴巴新零售淘系技术部 01、淘宝社交关系推荐的背景 1、互联网下半场到来:互联网的下半场,人口红利消失,各大平台需要对用户做精细化运营,用户的增长和留存是每一...

阿里云官方博客
42分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部