【发布时间】:2013-09-05 20:25:18
【问题描述】:
我是 Java 的新手,我正在用它来教我的 Lego NXT 机器人走出迷宫的一些方法。算法参数应外包并加载到代码中,这就是我使用 JSON 的原因。 我的 JSON 文件非常简单(左手算法):
{"algorithm":
{
"onGapLeft": "moveLeft",
"onGapFront": "moveForward",
"onGapRight": "moveRight",
"default": "moveBackward"
}
}
按顺序读取此文件非常重要。 IE。如果你改变左右算法将成为右手算法。 这是迄今为止的Java代码,我希望你明白我想要做什么。顺便说一句:我正在使用JSON.simple!
private static void loadAlgorithm() throws InterruptedException {
JSONParser parser = new JSONParser();
Object obj = parser.parse(new FileReader("lefthand.json"));
JSONObject jsonObject = (JSONObject) obj;
JSONArray algorithm = (JSONArray) jsonObject.get("algorithm");
int length = algorithm.size();
for(int i = 0; i < length; i++)
{
switch (algorithm[i].key)
{
case "onGapLeft" : leftPos = i; break;
case "onGapFront": frontPos = i; break;
case "onGapRight": rightPos = i; break;
default: break;
}
switch (algorithm[i].value)
{
case "moveLeft" : directionAlgorithm[i] = direction.Left; break;
case "moveFront" : directionAlgorithm[i] = direction.Forward; break;
case "moveRight" : directionAlgorithm[i] = direction.Right; break;
case "moveBackward": directionAlgorithm[3] = direction.Backward; break;
default: break;
}
}
}
我现在需要知道是否可以获得密钥字符串(我实际上使用 algorithm[i].key 的地方)以及值字符串(algorithm[i].value)的相同。
非常感谢您的帮助!
【问题讨论】:
-
我认为它不能完全解决您的问题,但是您将“算法”误解为 JSONArray。它实际上是一个 JSONObject,这意味着就像从根对象中获取“算法”一样,您可以从算法对象中获取“onGapLeft”/“onGapFront”值。数组的值用 [] 括号和逗号按顺序声明,并且没有字符串标签(例如:["moveLeft", "moveRight"]
-
是的,该 JSON 中没有“数组”。并且“对象”(地图/字典)中的条目顺序是“未定义的”——即使它们以一种顺序到达,解析 JSON 的代码也可以合法地重新排列它们。
-
(有人想知道为什么你有单个值的键名,如果它们总是按给定的顺序排列。如果你是这样的话,只有一个
[moveLeft, moveForward, moveRight, moveBackward]的数组会更有意义想要。或者将键名设为“firstMove”、“secondMove”、“thirdMove”、“fourthMove”。) -
(有关 JSON 规范,请参阅 json.org。学习只需 5-10 分钟。)
-
谢谢大家!因此,如果我像下面所述的 zigdawgydawg 那样更改 JSON,那么它会被排序吗? @HotLicks:这将是一个解决方案,但我们希望它更可定制,因此我们添加了这两个价值解决方案! :)