本文出自:http://www.iteye.com/topic/402083
下面是一个将XML转换为JSON的示例,
通过SAX来解析XML,从而生成相应的JSON字符串
自我感觉还算是一个比较通用的API ,主要包含3个类
1,ToJsonSAXHandler
类 继承了 DefaultHandler 类,在解析
XML的过程中负责处理SAX事件。代码如下:
- packageorg.yjf.xmlToJson;
- importorg.xml.sax.Attributes;
- importorg.xml.sax.SAXException;
- importorg.xml.sax.helpers.DefaultHandler;
- publicclassToJsonSAXHandlerextendsDefaultHandler{
- privateStringBuilderjsonStringBuilder;
- privatebooleanisProcessing;
- privatebooleanjustProcessStartElement;
- publicToJsonSAXHandler(){
- jsonStringBuilder=newStringBuilder();
- }
- @Override
- publicvoidstartDocument()throwsSAXException{
- isProcessing=true;
- justProcessStartElement=true;
- this.jsonStringBuilder.delete(0,this.jsonStringBuilder.length());
- }
- @Override
- publicvoidendDocument()throwsSAXException{
- isProcessing=false;
- }
- @Override
- publicvoidstartElement(Stringuri,StringlocalName,StringqName,
- Attributesattrs)throwsSAXException{
- if(!justProcessStartElement){
- jsonStringBuilder.append(',');
- justProcessStartElement=true;
- }
- jsonStringBuilder.append("{");
- jsonStringBuilder.append("localName:").append('\"').append(localName).append('\"').append(',');
- jsonStringBuilder.append("uri:").append('\"').append(uri).append('\"').append(',');
- jsonStringBuilder.append("qName:").append('\"').append(qName).append('\"').append(',');
- jsonStringBuilder.append("attrs:{");
- if(attrs.getLength()>0){
- jsonStringBuilder.append(attrs.getLocalName(0)).append(":")
- .append(attrs.getValue(0));
- for(inti=1;i<attrs.getLength();i++){
- jsonStringBuilder.append(',').append(attrs.getLocalName(i)).append(":")
- .append(attrs.getValue(i));
- }
- }
- jsonStringBuilder.append("},");
- jsonStringBuilder.append("childElements:[").append('\n');
- }
- @Override
- publicvoidendElement(Stringuri,StringlocalName,StringqName)
- throwsSAXException{
- justProcessStartElement=false;
- jsonStringBuilder.append("]}").append('\n');
- }
- @Override
- publicvoidcharacters(char[]ch,intbegin,intlength)
- throwsSAXException{
- if(!justProcessStartElement){
- jsonStringBuilder.append(',');
- }else
- justProcessStartElement=false;
- jsonStringBuilder.append('\"');
- for(inti=begin;i<begin+length;i++){
- switch(ch[i]){
- case'\'':jsonStringBuilder.append("\\'");break;
- case'\"':jsonStringBuilder.append("\\\"");break;
- case'\n':jsonStringBuilder.append("\\n");break;
- case'\t':jsonStringBuilder.append("\\t");break;
- case'\r':jsonStringBuilder.append("\\r");break;
- default:jsonStringBuilder.append(ch[i]);break;
- }
- }
- jsonStringBuilder.append('\"').append('\n');
- }
- publicStringgetJsonString()throwsXMLToJSONException{
- if(this.isProcessing)
- thrownewXMLToJSONException("getJsonStringbeforeresolutionisfinished");
- else
- returnjsonStringBuilder.toString();
- }
- }
2,XMLToJSONException
是一个异常类(封装在转换过程中可能产生的异常),代码如下:
- packageorg.yjf.xmlToJson;
- publicclassXMLToJSONExceptionextendsException{
- privatestaticfinallongserialVersionUID=1L;
- publicXMLToJSONException(){}
- publicXMLToJSONException(Stringmessage){
- super(message);
- }
- }
3,XMLToJSON类 是一个将XML转换为JSON字符串的工具类
- packageorg.yjf.xmlToJson;
- importjava.io.File;
- importjava.io.FileInputStream;
- importjava.io.IOException;
- importjava.io.StringReader;
- importorg.xml.sax.InputSource;
- importorg.xml.sax.SAXException;
- importorg.xml.sax.XMLReader;
- importorg.xml.sax.helpers.XMLReaderFactory;
- publicclassXMLToJSON{
- publicstaticStringconvert(StringxmlStr)throwsSAXException,
- IOException,XMLToJSONException{
- returnconvert(newInputSource(newStringReader(xmlStr)));
- }
- publicstaticStringconvert(Filefile)throwsSAXException,
- IOException,XMLToJSONException{
- returnconvert(newInputSource(newFileInputStream(file)));
- }
- publicstaticStringconvert(InputSourceinputSource)throwsSAXException,
- IOException,XMLToJSONException{
- ToJsonSAXHandlerhandler=newToJsonSAXHandler();
- XMLReaderreader=XMLReaderFactory.createXMLReader();
- reader.setContentHandler(handler);
- reader.setErrorHandler(handler);
- reader.parse(inputSource);
- returnhandler.getJsonString();
- }
- }
测试类 Test 如下 (因为生成的JSON不包含缩进,所以看起来可能不太直观,所以我用了JSONObject类来打印带有缩进的JSON字符串,同时也验证了转换出来的JSON字符串是一个有效的JSON字符串):
- packagetest;
- importjava.io.File;
- importjava.io.IOException;
- importorg.json.JSONException;
- importorg.json.JSONObject;
- importorg.xml.sax.SAXException;
- importorg.yjf.xmlToJson.XMLToJSON;
- importorg.yjf.xmlToJson.XMLToJSONException;
- publicclassTest_1{
- publicstaticvoidmain(String[]args)throwsJSONException,
- SAXException,IOException,XMLToJSONException{
- StringjsonStr=XMLToJSON.convert(newFile("books.xml"));
- JSONObjectjsonObj=newJSONObject(jsonStr);
- System.out.println(jsonObj.toString(2));
- }
- }
books.xml 的内容如下:
- <?xmlversion="1.0"encoding="utf-8"?>
- <bookscount="2"xmlns="http://test.org/books">
- <bookid="1"page="1000">
- <name>ThinkinginJAVA</name>
- </book>
- <bookid="2"page="800">
- <name>CoreJAVA2</name>
- </book>
- </books>
运行 Test 类输出的JSON字符串如下:
{
"attrs": {"count": 2},
"childElements": [
"\n\t",
{
"attrs": {
"id": 1,
"page": 1000
},
"childElements": [
"\n\t\t",
{
"attrs": {},
"childElements": ["Thinking in JAVA"],
"localName": "name",
"qName": "name",
"uri": "http://test.org/books"
},
"\n\t"
],
"localName": "book",
"qName": "book",
"uri": "http://test.org/books"
},
"\n\t",
{
"attrs": {
"id": 2,
"page": 800
},
"childElements": [
"\n\t\t",
{
"attrs": {},
"childElements": ["Core JAVA2"],
"localName": "name",
"qName": "name",
"uri": "http://test.org/books"
},
"\n\t"
],
"localName": "book",
"qName": "book",
"uri": "http://test.org/books"
},
"\n"
],
"localName": "books",
"qName": "books",
"uri": "http://test.org/books"
}
相关推荐
xml字符串转换json格式 可用于微信小程序xml字符串转换json格式 安装 npm方式安装 npm install --save xmlstring2json bower方式安装 bower install xmlstring2json 用法示例: bookstore.xml文件 <title>...
主要介绍了java实现Xml与json之间的相互转换操作,结合实例形式分析了Java xml与json相互转换工具类的定义与使用相关操作技巧,需要的朋友可以参考下
本篇文章主要介绍了JS操作xml对象转换为Json对象示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
此应用程序将使用nodeJS允许用户以.XML格式上传新的BAC,然后将其获取.xml文件,将xml转换为JSON,然后将这些数据存储在mongoDB集合中。 完成此操作后,它将BACSDirectory/archivedBACS旧的BAC目录并将其放在...
本篇文章主要介绍了java将XML文档转换成json格式数据的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
基于PHP的开源功能 将EXCEL的XLS转换为JSON或XML格式 XLS第一行必需为TITLE, 内容不能有公式(请通过选择性粘贴处理) 内有示例XLS 通过PHP服务器访问index.php即可.
将XML转换为JSON的Go软件包 安装 go get -u github.com/basgys/goxml2json 输入 import github.com/basgys/goxml2json 用法 代码示例 package main import ( "fmt" "strings" xj "github....
XStream示例代码,JavaBean与XML,JSON之间互相转换(包含完整jar包)jettison-1.3.3.jar、xmlpull-1.1.3.1.jar、xstream-1.4.7.jar
本文实例讲述了js实现的xml对象转json功能。分享给大家供大家参考,具体如下: 支持无限级别xml结构对象转json,并且支持任意标签属性转json(兼容ie8等浏览器) xml字符串转xml对象: function loadXml(str) { ...
该工具将通过STDIN接收JSON并将其转换为XML到STDOUT。 这个工具是用编写的。 您可以从安装Go语言并将其编译为您的操作系统。 您可以使用go build jsontoxml.go在本地构建它,这将构建一个可执行文件。 如果您需要...
一个将CSV转换为Xml和Json的小程序。 在项目中,我添加了两个示例csv文件。 一个是纯csv,另一个是具有csv结构的txt文件。 正如我在帮助部分中所写的那样,所有文件都必须具有标头。 使用正则表达式对行进行分割,...
watch_dir 监视目录,并将指定目录及其子目录中的任何xml转换为JSON,并将其输出到另一个用户指定的目录。 当删除相应的xml文件时,它也会删除json文件。 启动时,该程序将运行第一个目录中的所有现有xml文件,并将...
一个简单的XML到JSON转换器注意-这是一个beta 。 自行决定使用。安装只需在项目目录中使用NPM进行安装npm安装simple-xml-to-json用法和API1. convertXML(xmlToConvert [,customConverter]) xmlToConvert <字符...
入参是字符串格式的xml,目的是解析xml节点值,作为数据库检索where条件,检索出数据库记录,利用四个游标返回四个数据集,然后用groovy脚本将四个游标数据集解析成json出参中对应的四个节点值。出参json有两层结构...
C# Json转Xml 或 Xml转Json 使用详细说明及资源 支持框架2.0以上 控件Newtonsoft.Json.dll内容详细包含源代码示例
主要介绍了Python中xml和json格式相互转换操作,结合实例形式分析了xmltodict库的安装及xml格式与json格式数据相互转换操作技巧,需要的朋友可以参考下
YAML 到 XML 或 JSON 转换器 ================================================== ====== 安装 npm install -g yamltoxmljson 用法 usage: yamltoxmljson ./config.json config.json 示例 ... 将编写一个这样