找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12613|回复: 11

[教程源码] json字符串格式提取指定数据

[复制链接]
  • 打卡等级:行侠仗义

1080

主题

2100

回帖

4280

积分

院长

鲜花
6
猫粮
7390
QQ
发表于 2019-8-30 11:28:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
{"code":"0","msg":"项目信息获取成功","projects":[{"projectId":"9a127d6a379545f9acdb8d8cca3b75eb","projectCode":"1623"},{"projectName":"紫猫学院论坛注册短信验证","projectType":"短信","projectPrice":"0.4","projectMatchText":"紫猫","projectCanAdd":"0","projectCanAddLabel":"取消收藏","projectMatchNo":"null"}]}

经常有同学提问上面这种数据如何解析提取出自己想要的内容, 其实这个很简单, 只要搞清楚数组与table的区别, 按键手机版一个命令就可以解决了.

首先, 我们介绍一个方便查看json数据的网站 https://json.cn/ 大家可以把上面数据输入到网页里就可以看到解析后的样子了.
Snipaste_2019-08-30_11-09-32.png


在按键手机版的json解析中, 大括号{}表示table数据类型, 中括号[]表示数组数据类型.

所以上面数据中, 第一层数据是table数据, 里面有code, msg, projects这3个键名, 其中projects的数据是中括号[]数组数据, 该数组里有两个table数据. 以此类推, 按键手机版代码如下:
[按键精灵] 纯文本查看 复制代码
//假设json数据存放在文件/sdcard/json.txt中
Dim jsontxt = File.Read("/sdcard/json.txt")
TracePrint "json数据为: ", jsontxt

//使用Encode扩展转换json为table数据
Dim t = Encode.JsonToTable(jsontxt)

//提取第一层的code和msg, 由于这两个数据是字符串, 所以可以直接输出查看
TracePrint "code数据: ", t["code"]
TracePrint "msg数据: ", t["msg"]

//而projects数据是数组, 无法直接输出, 但是可以查看下该数组的最大下标
TracePrint "projects最大下标: ", Ubound(t["projects"])

//数组是通过下标取值的, 在table格式的写法中, 下标是从1开始, 并非是0
//在这个数组中, 有两个元素, 这两个元素也是table数据
//t["projects"][1]表示第一个元素
//t["projects"][2]表示第二个元素

//projectId在数组的第一个元素中, 所以要输出写法如下
TracePrint "projectId数据: ", t["projects"][1]["projectId"]

//projectName在数组的第二个元素中, 所以要输出写法如下
TracePrint "projectName数据: ", t["projects"][2]["projectName"]

//其他数据写法都差不多, 仔细分析结构, 区分清楚中括号[]与大括号{}区别, 就可以提取任何自己想要的数据.

楼主热帖

1

主题

3

回帖

6

积分

学前班

鲜花
0
猫粮
74
发表于 2020-3-11 12:21:32 | 显示全部楼层
顶顶顶顶

0

主题

1

回帖

1

积分

学前班

鲜花
0
猫粮
16
发表于 2020-3-11 12:28:52 | 显示全部楼层
顶顶o(∩_∩)oo(∩_∩)o

0

主题

1

回帖

1

积分

学前班

鲜花
0
猫粮
3
发表于 2020-3-21 00:18:54 | 显示全部楼层
谢谢o(∩_∩)o
  • 打卡等级:无名新人

0

主题

108

回帖

108

积分

小学生

鲜花
0
猫粮
575
发表于 2020-12-8 20:56:49 | 显示全部楼层
        很给力!
  • 打卡等级:初涉江湖

1

主题

5

回帖

7

积分

学前班

鲜花
0
猫粮
201
发表于 2020-12-10 16:35:30 | 显示全部楼层
本帖最后由 许小诺 于 2020-12-10 16:36 编辑

如果不是数组,类似于这种怎么解析呢?
[按键精灵] 纯文本查看 复制代码
当前脚本第34行:{"body":"{\"requestId\":null,\"code\":\"0000\",\"message\":\"成功\",\"token\":\"121212121dfdfdfdf9d361\"}","cookies":{}}

这个是得到的json数据,没有转table。不是很好获取code这些数据

  • 打卡等级:行侠仗义

1080

主题

2100

回帖

4280

积分

院长

鲜花
6
猫粮
7390
QQ
 楼主| 发表于 2020-12-10 17:42:36 | 显示全部楼层
许小诺 发表于 2020-12-10 16:35
如果不是数组,类似于这种怎么解析呢?
[mw_shl_code=qscript,true]当前脚本第34行:{"body":"{\"requestId ...

一样的, 按键就是通过转table后解析的
  • 打卡等级:初涉江湖

1

主题

5

回帖

7

积分

学前班

鲜花
0
猫粮
201
发表于 2020-12-11 13:32:35 | 显示全部楼层
紫猫 发表于 2020-12-10 17:42
一样的, 按键就是通过转table后解析的

不呢,我用上面得方法弄不了,我这样解决得,我把代码贴出来
[按键精灵] 纯文本查看 复制代码
dim json= jsdvip.HttpGet(请求地址 , 提交数据)
TracePrint json
Dim resp = Encode.JsonToTable(json)
Dim respv = Encode.JsonToTable(resp["body"])
TracePrint  "requestId:"&respv["requestId"]
TracePrint  "code:"&respv["code"]
TracePrint  "message:"&respv["message"]
TracePrint  "token:"&respv["token"]


完美解决
  • 打卡等级:无名新人

0

主题

108

回帖

108

积分

小学生

鲜花
0
猫粮
575
发表于 2020-12-11 13:45:30 | 显示全部楼层
顶顶顶顶
  • 打卡等级:行侠仗义

1080

主题

2100

回帖

4280

积分

院长

鲜花
6
猫粮
7390
QQ
 楼主| 发表于 2020-12-11 13:50:41 | 显示全部楼层
许小诺 发表于 2020-12-11 13:32
不呢,我用上面得方法弄不了,我这样解决得,我把代码贴出来
[mw_shl_code=qscript,true]dim json= jsdvi ...

知道了, 你这个body里面也是字符串内容, 所以需要再次转换, 我以为你已经转换好了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|紫猫编程学园

GMT+8, 2024-3-28 19:40

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表