65.9K
CodeProject 正在变化。 阅读更多。
Home

jParser PCL .NET Json 解析器

starIconstarIconstarIconstarIconstarIcon

5.00/5 (3投票s)

2016年2月15日

CPOL

1分钟阅读

viewsIcon

19800

downloadIcon

10

快速简便地解析 Json 数据

引言

JSON (JavaScript 对象表示法) 是一种轻量级的数据交换格式。它易于人类阅读和编写,也易于机器解析和生成。更多信息,请访问:www.json.org

为什么选择 JSON?

  • 易于阅读
  • 与 XML 相比,文件尺寸小
  • 大多数网站的 API 使用 Json 来获取和发布数据

背景

我编写这个库是为了实现以下功能

  • 类似于 Newtonsoft.Json 的风格来获取值,例如 data["some_str"][ANY_INT]
  • 文件尺寸小,约为 11kb
  • 支持 Json 数据类型:StringIntDoubleBoolNullArrayObject
  • 支持循环
  • 代码量小,易于理解
  • 可移植类库。PCL
  • 仅使用循环和 If 语句来解析数据,以便于移植到其他语言
  • 支持所有类型的 Json,即使是 Newtonsoft 中需要使用 JArrays 解析的 Json 数组,在这个库中,它在一个方法中解析所有类型

Using the Code

假设我们有以下简单的 Json 数据

{"menu": {
  "id": "file",
  "value": "File",
  "popup": {
    "menuitem": [
      {"value": "New", "onclick": "CreateNewDoc()"},
      {"value": "Open", "onclick": "OpenDoc()"},
      {"value": "Close", "onclick": "CloseDoc()"}
    ]
  }
}}

要解析这段文本

var result = jParser.parser.Parse(JSON_DATA_STRING);

要从 result 中获取值,假设我们想要获取:“CreateNewDoc()” 值

string data = result["menu"]["popup"]["menuitem"][0]["onclick"];

要获取特定对象的类型,假设我们想要获取 menuitem 的值类型

Type tp = result["menu"]["popup"]["menuitem"].GetType();

tp 将是 List<object>

循环遍历 result 中的项目

foreach(var itm in result)
{
    // some code here
}

比较

历史

  • 版本 1.0.2.0 -- 从头重写,使用循环解析,添加对 IEnumerable 的支持,修复错误
  • 版本 0.1.2.0 -- 首次发布,使用递归解析
© . All rights reserved.