| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3138 人关注过本帖
标题:JSON与XML你不懂就OUT,真相是它们都是字符串
只看楼主 加入收藏
加菲猫的VFP
Rank: 2
等 级:禁止访问
帖 子:31
专家分:16
注 册:2021-11-24
结帖率:100%
收藏
 问题点数:0 回复次数:24 
JSON与XML你不懂就OUT,真相是它们都是字符串
JSON和XML这两个东西如果不弄清楚,BS,APP,中间层,小程序,公众号开发这道坎是万万迈不过去的,其实它们都是字符串,不信你接着往下看。

准备环境:
JSON解析:木瓜大侠的FOXJSON库
XML解析:系统一般自带
VFP SP2 7423


框架中自带FOXJSON,就不需要另外下载了。
如果想要这些文件,请关注公众号:加菲猫的VFP,发送“JSON”就可以获取下载链接。

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

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

键值对表示法
JSON 使用键/值对的字符串来表示数据{键:值}
{"name":"张三","age":"20"}可以表示一个姓名,年龄的信息

XML用标签来表示
张三 20

vfp来创建JSON
1.方法一

cJson=[{"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
方式一
cXML=[<preson><name>张三</name><age>20</age></preson>]

方式二

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数组
*--建立一个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
张三20
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 &&标签名


搜索更多相关主题的帖子: age item 标签 name XML 
2021-11-30 09:26
厨师王德榜
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:199
帖 子:995
专家分:4966
注 册:2013-2-16
收藏
得分:0 
感谢分享.
2021-11-30 09:42
schtg
Rank: 12Rank: 12Rank: 12
来 自:Usa
等 级:贵宾
威 望:67
帖 子:1790
专家分:3389
注 册:2012-2-29
收藏
得分:0 
谢谢!
2021-12-01 06:55
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
用系统的 MSScript
程序代码:
sc = CREATEOBJECT("ScriptControl")
sc.Language = "JavaScript"
cJson='var d = [{"name":"张三","age":20},{"name":"李四","age":8}] '
sc.AddCode(cJson)
FOR EACH oj IN sc.CodeObject.d
    ? oj.name,oj.age
ENDFOR
2021-12-01 15:21
foxfans
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:113
专家分:324
注 册:2021-10-23
收藏
得分:0 
做为服务器后端代码,CreateObject少用少封装,多一层性能大幅下降,吞吐量减少60%以上,如果createobject常驻还好点,不然不断创建释放性能是非常低下,多用原生Dll, Fll库,如果是客户端用可以忽略这些性能损耗.

[此贴子已经被作者于2021-12-1 16:13编辑过]

2021-12-01 15:55
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
以下是引用foxfans在2021-12-1 15:55:55的发言:

做为服务器后端代码,CreateObject,少用少封装,多一层性能大幅下降,吞吐量减少60%以上,如果createobject常驻还好点,不然不断创建释放性能是非常低下,多用原生用dll, fll库.

VFP就这样,尤其是CreateObject对象是外部进程(如EXCEL),涉及到跨进程,想快点也不容易。
对于一般用VFP的自己写DLL扩展有难度,会写DLL的可能也不会用VFP做服务端
2021-12-01 16:10
foxfans
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:113
专家分:324
注 册:2021-10-23
收藏
得分:0 
回复 6楼 吹水佬
的确用Vfp的越来越少了,VFP充当服务端后端开发非常难得,本身属非编译型语言,想快点也很难. 建议楼主多考虑直接调用外部Fll,Dll来提速,尽量少些中间环节效果会更佳,最没办法的时候才会去考虑com组件.
2021-12-01 16:40
sam_jiang
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:806
专家分:1231
注 册:2021-10-13
收藏
得分:0 
见识了,全是大佬啊。。。
2021-12-01 19:27
加菲猫的VFP
Rank: 2
等 级:禁止访问
帖 子:31
专家分:16
注 册:2021-11-24
收藏
得分:0 
回复 7楼 foxfans
快和慢都是相对的,先解决是否可用的问题,再解决好用的问题,再解决速度的问题。

公众号:加菲猫的VFP
主页:http://www.
VFP搞定BS、CS、APP、公众号、中间层
2021-12-02 08:27
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
以下是引用加菲猫的VFP在2021-12-2 08:27:44的发言:

快和慢都是相对的,先解决是否可用的问题,再解决好用的问题,再解决速度的问题。

现实就是这样,能有效地解决实际需要就可以。
如果从系统网络应用层的底层开发,只用VFP代码也可以写出B/S、C/S、F/S应用系统。
肯定没有人会那么“笨”只用VFP代码来写这类应用,因到处随手可得到用在这方面开发的控件、类库和扩展库,轻松省时省力何乐而不为。
2021-12-02 09:30
快速回复:JSON与XML你不懂就OUT,真相是它们都是字符串
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019441 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved