惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
P
Privacy International News Feed
C
Cyber Attacks, Cyber Crime and Cyber Security
腾讯CDC
T
Threatpost
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
CERT Recently Published Vulnerability Notes
大猫的无限游戏
大猫的无限游戏
Apple Machine Learning Research
Apple Machine Learning Research
美团技术团队
Cisco Talos Blog
Cisco Talos Blog
C
Cisco Blogs
A
Arctic Wolf
人人都是产品经理
人人都是产品经理
NISL@THU
NISL@THU
L
LINUX DO - 热门话题
爱范儿
爱范儿
GbyAI
GbyAI
The Register - Security
The Register - Security
AWS News Blog
AWS News Blog
MyScale Blog
MyScale Blog
T
Tenable Blog
Hugging Face - Blog
Hugging Face - Blog
A
About on SuperTechFans
Cyberwarzone
Cyberwarzone
量子位
Microsoft Azure Blog
Microsoft Azure Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园_首页
C
Cybersecurity and Infrastructure Security Agency CISA
The Cloudflare Blog
B
Blog RSS Feed
小众软件
小众软件
D
Docker
Know Your Adversary
Know Your Adversary
Y
Y Combinator Blog
P
Privacy & Cybersecurity Law Blog
Engineering at Meta
Engineering at Meta
Latest news
Latest news
AI
AI
SecWiki News
SecWiki News
酷 壳 – CoolShell
酷 壳 – CoolShell
S
Secure Thoughts
N
News | PayPal Newsroom
The Hacker News
The Hacker News
MongoDB | Blog
MongoDB | Blog
Martin Fowler
Martin Fowler
博客园 - 司徒正美
L
Lohrmann on Cybersecurity
Cloudbric
Cloudbric

博客园 - 未未

用vsstudio 设计Winform 高分屏上布局错乱的问题 探寻路径 数据类型和Json格式[zt] 繁星代码生成器开源 (源代码) 繁星查询分析器 代码生成器 架构提取工具-tqdemo SyCODE Syntax Highlighter javascript语法高亮引擎 自动代码生成和VBA脚本 代码生成工具的分类及比较 模板语法规则说明 繁星代码生成器0.91版 【视频】 0.9版-繁星代码生成器 转:C#开源资源大汇总 代码生成原则Top10 我的系分之路 你必须知道的10种国产编程语言 揭秘正则表达式 我的lxfRegex现实[源] 有关调试的方法 [源码]C# to SQL 的翻译器.net 1.1版
jsonToxml 通过LL型方法实现(C#)[源]
未未 · 2009-10-20 · via 博客园 - 未未

json是网络中一种通用的数据传输格式,在某些时候需要将json数据格式转化成xml,这里发布自己的一个实现过程.

分析过程包括词法分析和语法分析 构建xml三个部分,语法分析采用采用LL型自上到下的方式.

词法分析中需要的基本单位 有Token 类:表示一个词 TokenType

定义

Code

json语法分析过程 值通常的形式为
 var v = {id:100,id:{id:[20,5]}}
var v = 13;
var v=[a,b,c];

定义的范式为,值,对象序列,键值,值序列,它们的对应关系为

    //值 => id |{对象序列}|[值序列] --对应MathValue()方法解析
    //对象序列=>键值|对象序列,键值 --对应MathObjectList()方法解析;
    //键值=>id:值
    //值序列=>值|值序列,值 --对应MathValueList()方法解析;

(说明:源代码书写有误 Math->应该是Match)

就是说MathValue()匹配json的值

Code

Code

代码中在语法分析的同时进行了xml树的创造,调用的参数为xml的父节点

这样就完成了一个简单的分析,调用的方法为:

           Translator translator = new Translator();
            translator.Tranfile(this.richTextBox1.Text);
            this.richTextBox2.Text = translator.doc.OuterXml;

处理网上的一个示例程序

{
  name:"中国",
  province:[
  {
  name:"黑龙江",
  citys:{
  city:["哈尔滨","大庆"]
  }
  },
  {
  name:"广东",
  citys:{
  city:["广州","深圳","珠海"]
  }
  },
  {
  name:"台湾",
  citys:{
  city:["台北","高雄"]
  }
  },
  {
  name:"新 疆",
  citys:{
  city:["乌鲁木齐"]
  }
  }
  ]
  }

输出结果(格式化后):

源代码下载