我正在尝试加载一些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阅读器必须给我每个对象的关键AND值,因为我需要填充模板。原因是药物的区域部分不同。有些人有额外的给药途径,所以我有另一个关键:价值对不同的药物没有。有些是按推注和每次滴注,有些不是。所以没有方便的json结构。 我找到了rdougan here的答案,部分允许我这样做:
型号:
Ext.define('my.model.Drug', {
extend: 'Ext.data.Model',
config: {
fields: ['name', 'value']
}
});
自定义Json Reader:
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更新时避免使用它。并且这次做得更好。
请您指点一种解析这个丑陋数据结构的方法吗?
谢谢
答案 0 :(得分:0)
我对扩展JSON读者不太了解,所以只是猜测,但也许你应该覆盖'read'方法?然后你可以按照自己的意愿浏览JSON
此外,如果您可以控制JSON,则应考虑更改它
通常,JSON中的键在数组中的所有项目中都应该相同
密钥不是数据,它们是元数据
所以,如果你在不同的药物之间确实有不同的属性,那么这样的事情可能是一个解决方案:
[{
名称:'丙泊酚1%',
属性:[{title:'induction',value:'22 -56g'},
{标题:'镇静',价值:'22'},
等
]},
{name:'nextDrug'}
等。