Foxtable(狐表)用户栏目专家坐堂 → Jobject 遍历问题


  共有4353人关注过本帖树形打印复制链接

主题:Jobject 遍历问题

帅哥哟,离线,有人找我吗?
qq252476275
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:196 积分:1429 威望:0 精华:0 注册:2020/5/23 14:56:00
Jobject 遍历问题  发帖心情 Post By:2022/1/14 8:34:00 [显示全部帖子]

Dim jo As JObject = args(1)

' 转为Object
Dim jc As JObject =  JObject.Parse(jo("content").ToString())

Dim strSQL As String  = ""
' 先查询表格,以便处理日期列
strSQL = "Select Top 1 "

For Each jp As JProperty In jc
    strSQL = strSQL & "[" & jp.Name.ToString() & "] , "
Next

报错  JToken 不能转为 JProperty
改用 as  JToken 报 JToken不能转为JToken



------
Dim arrData As New JArray
Dim jObj    As New JObject
jObj("tableName") = "bm_user"

Dim objContent As new JObject
objContent("id") = 1
objContent("name") = "fzr"

jObj("content")   = objContent
jObj("where") = "keyong = 1"

arrData.Add(jObj)

Dim jObj1    As New JObject
jObj1("tableName") = "bm_units"

Dim objContent1 As new JObject
objContent1("id") = 2
objContent1("name") = "yy"

jObj1("content")   = objContent1
jObj1("where") = "keyong = 2"

arrData.Add(jObj1)

'Dim js As String = arrData.ToString()
'output.show(js)

For Each jt As JToken In arrData
    output.show(jt.ToString())

    If jt("user") Is Nothing Then
      '  MessageBox.Show("user键值不存在!")
    End If

    For Each jp As JProperty In jt
        output.show(jp.ToString())
       ' output.show(jp("where").ToString())
       ' output.show(jp("tableName").ToString())
        output.show("    ")
    Next
Next

这样使用 as jProperty 却是正常的

 回到顶部
帅哥哟,离线,有人找我吗?
qq252476275
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:196 积分:1429 威望:0 精华:0 注册:2020/5/23 14:56:00
  发帖心情 Post By:2022/1/14 9:10:00 [显示全部帖子]

没有调用这个函数呢, 只是写了个内部函数

准备写成 下面代码中的content

Dim arrData As New JArray
Dim jObj    As New JObject
jObj("tableName") = "bm_user"

Dim objContent As new JObject
objContent("id") = 1
objContent("name") = "fzr"

jObj("content")   = objContent
jObj("where") = "keyong = 1"

arrData.Add(jObj)

Dim jObj1    As New JObject
jObj1("tableName") = "bm_units"

Dim objContent1 As new JObject
objContent1("id") = 2
objContent1("name") = "yy"

jObj1("content")   = objContent1
jObj1("where") = "keyong = 2"

arrData.Add(jObj1)

'Dim js As String = arrData.ToString()
'output.show(js)

For Each jt As JToken In arrData
    output.show(jt.ToString())

    If jt("user") Is Nothing Then
      '  MessageBox.Show("user键值不存在!")
    End If

    For Each jp As JProperty In jt
        output.show(jp.ToString())
       ' output.show(jp("where").ToString())
       ' output.show(jp("tableName").ToString())
        output.show("    ")
    Next
Next
[此贴子已经被作者于2022/1/14 9:10:51编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
qq252476275
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:196 积分:1429 威望:0 精华:0 注册:2020/5/23 14:56:00
  发帖心情 Post By:2022/1/14 9:53:00 [显示全部帖子]

这个有相应的帮助文档吗?  JObject , JArray , JToken , JProperty 都晕了 

 回到顶部
帅哥哟,离线,有人找我吗?
qq252476275
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:196 积分:1429 威望:0 精华:0 注册:2020/5/23 14:56:00
  发帖心情 Post By:2022/1/14 15:48:00 [显示全部帖子]

如何 判断 content 是否存在呢?
[此贴子已经被作者于2022/1/14 15:50:27编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
qq252476275
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:196 积分:1429 威望:0 精华:0 注册:2020/5/23 14:56:00
  发帖心情 Post By:2022/1/14 16:41:00 [显示全部帖子]

JArray  元素  用  JToken
Jobject 元素 用 JProperty 对吗?

还是 JProperty 用在哪里?

 回到顶部
帅哥哟,离线,有人找我吗?
qq252476275
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:196 积分:1429 威望:0 精华:0 注册:2020/5/23 14:56:00
  发帖心情 Post By:2022/1/14 16:57:00 [显示全部帖子]

这样可以执行

For Each jt As JProperty In jb.Properties
    output.show("key2   : " & jt.name.ToString())
    output.show("value2 : " & jt.value.ToString())
Next

老的项目里,这样执行,也可以
arrContent(i) : 
js前端代码
var addData = {
角色ID : roleID,
控件ID : addControlIDs[i],
可用   : 1,
创建者 : creater,
修改者 : creater
};
ajaxData.content.push( addData);


foxtable代码:
For Each jp As JProperty In arrContent(i)
                        ' ACCESS的日期没有处理
                        If dt.DataCols(jp.name).IsDate Then
                            If  jp.value.ToString.Replace("'","''") = ""  Then
                                strValue = strValue & "[" & jp.name.ToString & "] = null ,"
                            Else ' 未考虑access的日期方式  "#2021/03/20#"
                                If jp.value.ToString = "needServerTime" Then   ' 如果需要服务器时间,则使用, 否则使用前端值
                                    strValue = strValue & "[" & jp.name.ToString & "] = '" & Time & "',"
                                Else
                                    strValue = strValue & "[" & jp.name.ToString & "] = '" & jp.value.ToString.Replace("'","''") & "',"
                                End If
                            End If


 回到顶部
帅哥哟,离线,有人找我吗?
qq252476275
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:196 积分:1429 威望:0 精华:0 注册:2020/5/23 14:56:00
  发帖心情 Post By:2022/1/15 7:41:00 [显示全部帖子]

' jsonString   组织好的json字符串
'1、jsonString 是数组
dim jsonString as String
js
dim ja as JArray = JArray.Parse(jsonString)
'JSON数组的对象为JArray,数组成员的类型为JToken,所以也可以用下面的代码遍历JSON数组:
For each jt as JToken in ja
output.show(jt.ToString())
next


'直接调用某个元素, 从0开始
output.show(ja(0))


'2、jsonString 是字典
dim jsonString as String
js"x1"" : ""y1"" , ""x2"" : ""y2"", ""x3"":""y3""}"
dim jb as JObject = JArray.Parse(jsonString)
For each jp as object in jb
output.show(jp.key.ToString())
output.show(jp.value.ToString())
next

' 直接调用某个键值
output.show(jb("x1"))

' 判断某个键值是否存在
If jb("xx") IsNot Nothing Then
    output.show("存在xx键值")
Else
    output.show("不存在xx键值")
End If


 回到顶部