C#编程之 VB .NET 解析 JSON
白羽 2018-07-10 来源 :网络 阅读 2533 评论 0

摘要:本文将带你了解C#编程之 VB .NET 解析 JSON,希望本文对大家学C#/.Net有所帮助


如何在 .NET 程序中解析 JSON

 

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

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

官方网站: //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

                '//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)

        '//bbs.csdn.net/topics/390910345

        '//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()

 

                );

 

        }

 

 

    }

}

 

以上就介绍了C#.NET的相关知识,希望对C#.NET有兴趣的朋友有所帮助。了解更多内容,请关注职坐标编程语言C#.NET频道!


本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程