2

我正在尝试加载一些 JSON,其中存储了许多关于儿科患者的大约 100 种麻醉药物的变量。

实际值是根据患者的体重、年龄等计算得出的:

例子:

var propofolInductionTitle = propofolName + ' ' + propofol0PercentConcentration + '- Induktion';
var propofol0InductionDosageMG = (Math.round(kg * 2 * 10) / 10) + ' - ' + (Math.round(kg * 5 * 10) / 10);

然后,我将我的药物创建为一个 json 块,其中包含我需要的变量,这些变量稍后将被计算值替换。我特别尝试避免 JSON 中的字符串,以便在数学块中定义所有变量时更容易本地化为英语和法语。

var hypnotikaJSON = {
            "thiopentalTitle": [
                {"thiopentalBrandName": ""},
                {"vialContentTitle": "thiopentalVialContent"},
                {"solutionTitle": "thiopentalSolution"},
                {"concentrationTitle": "thiopentalConcentration"},
                {"dosageString": "thiopentalDosageString"},
                {"atWeight": "thiopentalDosageMG"},
                {"thiopentalAtConcentration": "thiopentalDosageML"}
            ],
            "propofolInductionTitle": [
                {"propofolInductionBrandName": ""},
                {"propofolVialContentTitle": "propofolInductionVialContent"},
                {"propofolSolutionTitle": "propofolSolution"},
                {"propofolConcentrationTitle": "propofolInductionConcentration"},
                {"propofolInductionDosageStringTitle": "propofolInductionDosageString"},
                {"atWeight": "propofolInductionDosageMG"},
                {"propofolAtInductionConcentration": "propofolInductionDosageML"}
            ],
            "propofolSedationTitle": [
                {"propofolSedationBrandName":""},
                {"propofolVialContentTitle":"propofolSedationVialContent"},
                {"propofolSolutionTitle":"propofolSolution"},
                {"propofolConcentrationTitle":"propofolSedationConcentration"},
                {"propofolSedationDosageStringTitle":"propofolSedationDosageString"},
                {"atWeight":"propofolSedationDosageMG"},
                {"propofolAtSedationConcentration":"propofolSedationDosageML"}
            ],
            "laryngealMaskTitle": [
                {"laryngealMaskSizeTitle":"laryngealMaskSize"},
                {"laryngealMaskCuffSizeTitle":"laryngealMaskCuffSize"},
                {"laryngealMaskBiggestETTTitle":"laryngealMaskBiggestETT"},
                {"laryngealMaskBronchoscopeSizeTitle":"laryngealMaskBronchoscopeSize"}
            ]
    };

我的具体需求是 JSON 阅读器必须给我每个对象的键和值,因为我需要两者来填充模板。原因是药物的领域在部分不同。有些有额外的给药途径,所以我有另一个键:不同药物没有的值对。有些既作为推注又作为每次滴注给予,有些则不是。所以不可能有方便的 json 结构。我在这里找到了 rdougan 的答案,部分允许我这样做:

模型:

Ext.define('my.model.Drug', {
        extend: 'Ext.data.Model',
        config: {
            fields: ['name', 'value']
        }
    });

自定义 Json 阅读器:

Ext.define('Ext.data.reader.Custom', {
        extend: 'Ext.data.reader.Json',
        alias: 'reader.custom',
        getRoot: function (data) {
            if (this.rootAccessor) {
                data = this.rootAccessor.call(this, data);
            }

            var values = [],
                name;

            for (name in data) {
                values.push({
                    name: name,
                    value: data[name]
                });
            }

            return values;
        }
    });

店铺:

var store = Ext.create('Ext.data.Store', {
        fields: ['name', 'value'],
        data: hypnotikaJSON,
        autoLoad: true,
        proxy: {
            type: 'memory',
            reader: {
                type: 'custom'
            }
        }
    });

控制板:

this.viewport = new Ext.Panel({
        fullscreen: true,
        layout: 'fit',
        items: [{
            xtype: 'list',
            itemTpl: '<p class="description">{name}</p><p class ="values">{value}</p>',
            store: store
        }]
    });

不幸的是,我是一名医生而不是程序员,经过大量阅读后,我无法将其应用于嵌套的 JSON。自定义阅读器似乎只适用于第一级。我可以在没有阅读器的情况下做到这一点,没有商店,每个条目周围只有很多计划 html,但事实证明这非常慢,所以我想在从 Sencha Touch 1.1 更新时避免它。这次最好做对。

能否请您指出一种解析这种丑陋数据结构的方法?

谢谢

4

1 回答 1

0

我对扩展 JSON 阅读器知之甚少,所以只是猜测,但也许您应该覆盖“读取”方法?然后您可以根据需要检查 JSON

此外,如果您可以控制 JSON,则应该考虑更改它。
通常,JSON 中的键在数组中的所有项中都应该是相同的。
键不是数据,它们是元数据。
因此,如果您在不同药物之间确实具有不同的特性,那么这样的解决方案可能是一个解决方案:

[{

名称:'异丙酚 1%',
性质:[

{title:'induction',value:'22-56g'},
{title: 'Sedation',value:'22'}

]},
{name:'nextDrug'}
等。

于 2012-05-16T19:20:50.410 回答