jsonToxml 通过LL型方法实现(C#)[源]

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:["乌鲁木齐"]
  }
  }
  ]
  }

输出结果(格式化后):

 

- <xml>
  <name>中国</name>
- <province>
  <name>黑龙江</name>
- <citys>
  <city>哈尔滨</city>
  <city>大庆</city>
  </citys>
  </province>
- <province>
  <name>广东</name>
- <citys>
  <city>广州</city>
  <city>深圳</city>
  <city>珠海</city>
  </citys>
  </province>
- <province>
  <name>台湾</name>
- <citys>
  <city>台北</city>
  <city>高雄</city>
  </citys>
  </province>
- <province>
  <name>新 疆</name>
- <citys>
  <city>乌鲁木齐</city>
  </citys>
  </province>
  </xml>

 

源代码下载

posted @ 2009-10-20 10:04  未未  阅读(667)  评论(3编辑  收藏  举报