我在获取json文件时遇到问题我试图创建使用我已经制作的json模式,以便我可以利用智能感知和验证来确保json I必须手抓果力好。我不确定我的架构是否错误,或者我是如何尝试让VS2015使用它的。
现在,我已将所有架构内容抛入一个文件中(尝试将其拆分时出现问题)。
{
"$schema": "http://json-schema.org/schema#",
"id": "http://savatronix.com/jsonschemas/losthaven1/MainSchemaV1.json",
"title": "Lost Haven Common JSON",
"description": "A schema for json types that will be common across many different object types. V1",
"definitions": {
"gameDateTime": {
"type": "object",
"properties": {
"year": {
"type": "integer",
"minimum": 0
},
"month": {
"type": "string",
"enum": [ "Nil", "Spring", "Summer", "Autumn", "Winter" ]
},
"weekday": {
"type": "string",
"enum": [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ]
},
"day": {
"type": "integer",
"minimum": 0,
"maximum": 30
},
"hour": {
"type": "integer",
"minimum": 0,
"maximum": 23
},
"minute": {
"type": "integer",
"minimum": 0,
"maximum": 59
},
"second": {
"type": "integer",
"minimum": 0,
"maximum": 59
}
}
},
"characterAttributes": {
"type": "object",
"properties": {
"strength": {
"type": "integer",
"minimum": 0
},
"agility": {
"type": "integer",
"minimum": 0
},
"dexterity": {
"type": "integer",
"minimum": 0
},
"intelligence": {
"type": "integer",
"minimum": 0
},
"endurance": {
"type": "integer",
"minimum": 0
},
"charisma": {
"type": "integer",
"minimum": 0
},
"luck": {
"type": "integer",
"minimum": 0
}
}
},
"characterElements": {
"type": "object",
"properties": {
"earth": { "type": "integer" },
"wind": { "type": "integer" },
"fire": { "type": "integer" },
"water": { "type": "integer" },
"lightning": { "type": "integer" },
"light": { "type": "integer" },
"dark": { "type": "integer" }
}
},
"characterStatus": {
"type": "object",
"properties": {
"poison": { "type": "integer" },
"paralyze": { "type": "integer" },
"sleep": { "type": "integer" },
"fatigue": { "type": "integer" },
"charm": { "type": "integer" },
"confusion": { "type": "integer" }
}
},
"characterStats": {
"type": "object",
"properties": {
"attackPower": {
"type": "integer",
"minimum": 0
},
"block": {
"type": "integer",
"minimum": 0
},
"health": {
"type": "integer",
"minimum": 0
},
"defense": {
"type": "integer",
"minimum": 0
},
"evade": {
"type": "integer",
"minimum": 0
},
"attackSpeed": {
"type": "integer",
"minimum": 0
},
"parry": {
"type": "integer",
"minimum": 0
},
"stamina": {
"type": "integer",
"minimum": 0
},
"movementSpeedModifier": { "type": "integer" },
"elementalPower": { "$ref": "#/definitions/characterElements" },
"statusPower": { "$ref": "#/definitions/characterStatus" }
}
},
"attributesAndStatsContainer": {
"type": "object",
"properties": {
"attributes": { "$ref": "#/definitions/characterAttributes" },
"stats": { "$ref": "#/definitions/characterStats" }
}
},
"characterEquipmentState": {
"type": "object",
"properties": {
"weaponId": { "type": "string" },
"headgearId": { "type": "string" },
"chestId": { "type": "string" },
"legsId": { "type": "string" },
"bootsId": { "type": "string" },
"glovesId": { "type": "string" },
"firstAccessoryId": { "type": "string" },
"secondAccessoryId": { "type": "string" }
}
},
"baseObjectState": {
"type": "object",
"properties": {
"baseId": { "type": "string" },
"referenceId": { "type": "string" }
}
},
"characterState": {
"type": "object",
"allOf": [
{ "$ref": "#/definitions/baseObjectState" },
{
"properties": {
"characterName": { "type": "string" },
"characterSex": {
"type": "string",
"enum": [ "Unknown", "Male", "Female" ]
},
"race": {
"type": "string",
"enum": [ "Unknown", "Human", "Yokai" ]
},
"baseStats": { "$ref": "#/definitions/attributesAndStatsContainer" },
"currentHealth": {
"type": "integer",
"minimum": 0
},
"birthday": { "$ref": "#/definitions/gameDateTime" },
"equippedItems": { "$ref": "#/definitions/characterEquipmentState" }
}
}
]
},
"enemyStateObject": {
"type": "object",
"allOf": [
{ "$ref": "#/definitions/characterState" },
{
"properties": {
"isBoss": { "type": "boolean" }
}
}
]
},
"enemyState": {
"type": "object",
"properties": {
"enemies": {
"type": "array",
"items": { "$ref": "#/definitions/enemyStateObject" },
"minItems": 1
}
}
},
"NpcState": {
"type": "object",
"allOf": [
{ "$ref": "#/definitions/characterState" },
{
"properties": {
"backgroundInfo": { "type": "string" },
"history": { "type": "string" },
"personalityDescription": { "type": "string" },
"job": {
"type": "string",
"enum": [ "None" ]
},
"isRecruitable": { "type": "boolean" },
"isEligableSignificantOther": { "type": "boolean" },
"significantOtherId": { "type": "string" },
"wallet": {
"type": "integer",
"minimum": 0
},
"inventory": {
"type": "array",
"items": { "type": "string" }
}
}
}
]
}
}
}

我试图使用enemyState定义创建一个包含敌人数组的对象(这样做是因为MSDN博客建议使用$ schema,因此VS会自动检测所需的模式)。
"enemyState": {
"type": "object",
"properties": {
"enemies": {
"type": "array",
"items": { "$ref": "#/definitions/enemyStateObject" },
"minItems": 1
}
}
},

在我的Enemies.json中,我尝试过:
{
"$schema": "../../../JsonSchemas/MainSchema.json#/definitions/enemyState"
}

那是" msdn博客文章"推荐的方法:Intellisense for JSON Schema in the JSON Editor
我也尝试省略,并将链接直接复制到编辑器中的架构位置栏。
键入$ Schema部分时,它是正确的位置,因为#/ defintions / enemyState部分可以正常工作。
然而,这是它的程度。在尝试创建实际的json时,我没有得到intellisense或验证。我试过关闭并重新打开文件,以及重新启动visual studio。
我希望得到的预期效果是获得智能感知和验证,这样我就可以创建一系列敌方状态对象(这是我正在制作的游戏中各种敌人的定义,并且会被阅读然后加载到Unity中并确保所需的属性(尚未在架构中创建,图I' d至少在其工作之后添加所需的属性),以及确保一切都在范围内,它验证了所以我知道没有错误。
任何帮助都将不胜感激。
非常感谢!
答案 0 :(得分:2)
好的,所以我终于明白了它的工作原理。
我使用解决方案资源管理器创建了一个测试json文件 - > json架构并将其拖到JSON文件中,然后就可以了。
然后我将其修改为与我的架构的相关部分完全相同(调整$ ref' s,以便他们在需要时指向主模式文件)。
那很有效。
因此,无论出于何种原因,手动创建一个json文件(new - > text file - > rename)似乎会抛出Visual Studio并让它认为它直接设置为json时不是json文件json文件中的模式(但是VS能够很好地读取它,正如它如何从我的主模式文件中提取信息,通过我的" test" json模式文件,以及进入使用模式的实际json文件。
去图......