在listView QML中将嵌套JSON用作section.property

在listView QML中将嵌套JSON用作section.property,json,qt,qml,qt5,felgo,Json,Qt,Qml,Qt5,Felgo,我正在创建一个listView,其中我的委托及其信息来自JSON-我的问题是我试图从JSON中的嵌套区域设置节.property。嵌套数据将是动态的,因此我需要以适合每个应用程序用户的方式工作 我正在使用的文档是: & 我的JSON的一个例子是 [{ "firstname":"Edward", "subGroup":"Reception", "admin":1, "roles": {"Assistant":0,"Reception":1,"Stylist":1,"Technical":0

我正在创建一个
listView
,其中我的委托及其信息来自JSON-我的问题是我试图从JSON中的嵌套区域设置
节.property
。嵌套数据将是动态的,因此我需要以适合每个应用程序用户的方式工作

我正在使用的文档是: &

我的JSON的一个例子是

[{
"firstname":"Edward",
"subGroup":"Reception",
"admin":1,
"roles":
    {"Assistant":0,"Reception":1,"Stylist":1,"Technical":0
    }
},
{
"firstname":"Claire",
"subGroup":"Stylist",
"admin":1,
"roles":
    {"Assistant":1,"Reception":0,"Stylist":1,"Technical":0
    }
}]
我使用的是
JsonListModel
,QT Creator代码的最小部分如下:

import Felgo 3.0
import QtQuick 2.0

Page {
id: editAdmins


property var newArr: dataModel.calendarUserItems.users
property var userRoles: ({})
property var l

JsonListModel { // list model for json data
    id: jsonModel
    source: dataModel.jsonList // my full JSON
    keyField: "firstname " + " surname" 
    fields: ["firstname", "surname", "subGroup", "admin", "email", "roles"]
}

SortFilterProxyModel { // SortFilterProxyModel for sorting or filtering lists
    id: sortedModel
   // Note: when using JsonListModel, the sorters or filter might not be applied correctly when directly assigning sourceModel
   // use the Component.onCompleted handler instead to initialize SortFilterProxyModel
    Component.onCompleted: sourceModel = jsonModel
    sorters: [
        RoleSorter {
            id: groupSorter
            roleName: "subGroup"
        },
    ]
}

AppListView {
    id:view
    model: sortedModel
    anchors.fill: parent

    section.property: "subGroup" //How I have used it previously before needing to set 'roles' as my property (which shows nothing)
    section.delegate: SimpleSection {}

delegate: SimpleRow {
    id: container

    text: model.firstname
    detailText: model.surname
    }
}
}
根据上面的JSON,预期结果是我的listView在
角色
嵌套中有4个部分。
助理、接待、造型师、技术人员

我的问题是: 我想使用
角色
作为我的
列表视图{section.property}
,用户的可见性取决于他们在该角色中的布尔值-从上面的示例可以看出; 爱德华将在接待处和造型师中都可见,而克莱尔将在助理和造型师中都可见

如何将嵌套的JSON定义为列表中的节属性

----更新---

通过在my
SortFilterProxyModel{}
中添加额外的
proxyRole
,如下所示:

proxyRoles: ExpressionRole {
            name: "role"
            expression: JSON.stringify(model.roles)
       }
并将我的
节。属性:
更改为“角色”,我可以为那些角色匹配的人创建节,更接近,但仍然不符合预期(请参见所附的屏幕截图)

我还进一步尝试了在数据中循环,包括:

        expression: {
            for(var x in model.roles){
                if(model.roles[x] === 1){
                    x
                }
            }
        }
然后返回最终索引(如上所述),或者再次返回,将项推送到一个新数组,但结果仍然返回所有项


列表视图
创建从模型数据派生的每个代理,这意味着代理无法被有效复制,这正是我试图根据用户角色中的布尔值所做的

我纠正了这一点,在创建数组时,在其角色中具有多个布尔值的任何用户都会为每个角色获得一个额外的数组对象,并将我的
section.property
指向每个角色名称

根据下面的代码,Edward将创建2个数组对象,然后作为“重复”委托

[{
"firstname":"Edward",
"subGroup":"Reception",
"admin":1,
"roles":
    {"Assistant":0,"Reception":1,"Stylist":1,"Technical":0
    }
},
{
"firstname":"Claire",
"subGroup":"Stylist",
"admin":1,
"roles":
    {"Assistant":1,"Reception":0,"Stylist":1,"Technical":0
    }
}]

listview
创建从模型数据派生的每个代理,这意味着代理不能被有效地复制,这正是我试图根据用户角色中的布尔值所做的

我纠正了这一点,在创建数组时,在其角色中具有多个布尔值的任何用户都会为每个角色获得一个额外的数组对象,并将我的
section.property
指向每个角色名称

根据下面的代码,Edward将创建2个数组对象,然后作为“重复”委托

[{
"firstname":"Edward",
"subGroup":"Reception",
"admin":1,
"roles":
    {"Assistant":0,"Reception":1,"Stylist":1,"Technical":0
    }
},
{
"firstname":"Claire",
"subGroup":"Stylist",
"admin":1,
"roles":
    {"Assistant":1,"Reception":0,"Stylist":1,"Technical":0
    }
}]

请出示你的密码。到目前为止,你成功做到了什么,你失败了什么。预期的行为是什么?你看到了什么。现在它看起来像是“为我做”任务。嗨@folibis我已经用一个最小的JsonListModel进行了更新,为了清晰起见,我正在使用它!这是一个通常设置
section.property:“…”
通常很好,但是如果它是嵌套数据的根,我的节就不会显示任何内容!您好@folibis如果这有助于提供更多关于我试图实现的目标的见解,我将进一步扩展我的问题!谢谢,请展示你的代码。到目前为止,你成功做到了什么,你失败了什么。预期的行为是什么?你看到了什么。现在它看起来像是“为我做”任务。嗨@folibis我已经用一个最小的JsonListModel进行了更新,为了清晰起见,我正在使用它!这是一个通常设置
section.property:“…”
通常很好,但是如果它是嵌套数据的根,我的节就不会显示任何内容!您好@folibis如果这有助于提供更多关于我试图实现的目标的见解,我将进一步扩展我的问题!谢谢