JSON与XML当今最流行的两种数据格式,猫猫教你用VFP解析他们

准备环境:
JSON解析用,木瓜大侠的FOXJSON库
XML解析类,系统一般自带
VFP SP2 7423
如果想要这些文件,请关注加菲猫的VFP,发送“JSON”就可以获取下载链接。

JSON与XML的概念

JSON:
一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。可在不同平台之间进行数据交换。JSON采用兼容性很高的、完全独立于语言文本格式,同时也具备类似于C语言的习惯。
XML:
扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。

请记住,他们就是字符串。

键值对表示法

JSON 使用键/值对的字符串来表示数据{键:值}

{"name":"张三","age":"20"}

可以表示一个姓名,年龄的信息

XML用标签来表示

<preson>
<name>张三</name>
<age>20</age>
</preson>

vfp来创建JSON

1.方法一

cXML=[{"name":"张三","age","20"}]

它就是字符串嘛,简单的构建就这样完成了。

2.方法二:使用木瓜的foxjson

oUser=Createobject("foxJson") 
oUser.Append("name","张三") 
oUser.Append("age",20)
?oUser.ToString()

VFP如何解析这个字符串?

cJosn='{"name":"张三","age":"20"} '
oJSON=foxjson_parse(cJson)
?oJson.item("name")
?oJson.item("age")

vfp来创建JSON数组

oUsers=Createobject("foxJson",{}) 
oUser=Createobject("foxJson") 
oUser.Append("name","张三") 
oUser.Append("age",20)
oUsers.Append(oUser) 
oUser=Createobject("foxJson")
oUser.Append("name","李四") 
oUser.Append("age",18) 
oUsers.Append(oUser)
?oUser.toString()
VFP解析JSON数组
cJson='[{"name":"张三","age":20},{"name":"李四","age":8}] '
oUsers=foxjson_parse(cJson)
?"记录数",oUsers.count
?oUsers.item(1).item("name") 
?oUsers.item(1).item("age") 
?oUsers.item(2).item("name")
?oUsers.item(2).item("age")

vfp来创建xml

1.方法一

cXML=[<preson><name>张三</name><age>20</age></preson>]

2.方法二:

oXMLDOC=Createobject("Microsoft.XMLDOM")
oPerson= oXMLDOC.createElement("person")
    oName=oXMLDOC.createElement("name")
    oName.Text="张三"
   oAge=oXMLDOC.createElement("age")
   oAge.Text=20
oPerson.appendchild(oName)
oPerson.appendchild(oAge)
?oPerson.XML

建立一个XML数组

oXMLDOC=Createobject("Microsoft.XMLDOM")
oPersons=oXMLDOC.createElement("persons") 
&&加个S表示多个

oPerson= oXMLDOC.createElement("person")
oName=oXMLDOC.createElement("name")
oName.Text="张三"
oAge=oXMLDOC.createElement("age")
oAge.Text=20
oPerson.appendchild(oName)
oPerson.appendchild(oAge)
oPersons.appendchild(oPerson)
oPerson= oXMLDOC.createElement("person")
oName=oXMLDOC.createElement("name")
oName.Text="李四"
oAge=oXMLDOC.createElement("age")
oAge.Text=25
oPerson.appendchild(oName)
oPerson.appendchild(oAge)
oPersons.appendchild(oPerson)

VFP解析XML

TEXT TO lcXML NOSHOW TEXTMERGE 
<preson><name>张三</name><age>20</age></preson>
ENDTEXT 
oXMLDOC=Createobject("Microsoft.XMLDOM")
oXMLDOC.loadxml(lcXML )
?"共有子标签:",oxmldoc.documentElement.childNodes.length
oxmlHeader=oxmldoc.documentElement.childNodes.Item(0)
&&childNodes里有两个标签 分别是name ,age
?oxmlHeader.text  &&里面的值
?oxmlHeader.xml  &&连同标签
?oxmlHeader.nodename  &&标签名

通过childNodes 一级一级往下
XML 是无限多级的
上级的childNodes 存放下级标签有多少个,分别是什么

xml是一颗倒置的树,如果每一个节点都要输出,那得用编历算法(我研究完就忘记了,递归算法)

oNode=getElementsByTagName(“name”)

通过xmldoc的getElementsByTagName方法可以将所有同名的标签全部抓出来变成一个集合

使用另一个大招getElementsByTagName

TEXT TO lcXML NOSHOW TEXTMERGE 
<preson><name>张三</name><age>20</age></preson>
ENDTEXT 
oXMLDOC=Createobject("Microsoft.XMLDOM")
oXMLDOC.loadxml(lcXML )

oXMLHeaders=oXMLDOC.getElementsByTagName("name")
?"标签集合共有",oxmlHeaders.length
?oxmlHeaders.item(0).text  &&里面的值
?oxmlHeaders.item(0).xml  &&连同标签
?oxmlHeaders.item(0).nodename  &&标签名

更多资料 http://www.sn58.cn
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

加菲猫的VFP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值