在以下示例中,我试图将import java.util.Map;
import java.util.HashMap;
public class MyUrlParser {
private static final String SEPARATOR = ",";
public static void main(String[] args) {
final String URL = "http://localhost:8080/HospitalServer/files/file?id=34&firstname=alex&lastname=ozouf&age=33&firstname=kevin&lastname=gerfild&age=27";
MyUrlParser mup = new MyUrlParser();
try {
Map<String, String> parsed = mup.parse(URL);
System.out.println(parsed);
} catch (Exception e) {
System.err.println(e.getMessage());
}
}
public Map<String, String> parse(String url) throws Exception {
Map<String, String> retMap = new HashMap<>();
int queryStringPos = url.indexOf("?");
if (-1 == queryStringPos) {
throw new Exception("Invalid URL");
}
String queryString = url.substring(queryStringPos + 1);
String[] parameters = queryString.split("&");
if (parameters.length > 0) {
retMap.put("id", parameters[0]);
int personCounter = 0;
for (int minSize = 4; minSize <= parameters.length; minSize += 3) {
StringBuilder person = new StringBuilder();
person.append(parameters[minSize-3]);
person.append(SEPARATOR);
person.append(parameters[minSize-2]);
person.append(SEPARATOR);
person.append(parameters[minSize-1]);
personCounter++;
retMap.put("person" + personCounter, person.toString());
}
}
return retMap;
}
}
之类的对象数组传递给JSON对象"make":"Ford", "trim":"escape", "year":2014
car
但是我不明白为什么我必须将要素包裹在var player = {
"name":"John",
"age":30,
"car": [{"make":"Ford", "trim":"escape", "year":2014 }]
}
中。我的意思是为什么
{ }
没有"car": ["make":"Ford", "trim":"escape", "year":2014 ]
的数组不起作用。我不愿意在这里创建array数组,所以为什么需要将其包装在{}
答案 0 :(得分:2)
括号{}
表示一个对象。因此,{"make":"Ford", "trim":"escape", "year":2014 }
基本上可以描述一辆汽车。
如果John只能拥有一辆汽车,则可以使用以下方式:
var player = {
"name":"John",
"age":30,
"car": {"make":"Ford", "trim":"escape", "year":2014 }
}
如果John可以拥有多辆汽车,那么您应该使用如下的 array :
var player = {
"name":"John",
"age":30,
"cars": [{"make":"Ford", "trim":"escape", "year":2014 }, {"make":"Audi", "trim":"RS8", "year":2018 } /* more cars */ ]
}
答案 1 :(得分:1)
您的代码无法正常工作,因为您正在尝试创建类型为Object的数组,并且在Javascript中,Object被包装到{}
标记中
答案 2 :(得分:1)
在JSON中,数组由值组成。值可以是字符串(exports.createBankAccount = functions.region('europe-west1').https.onCall(async (data, context) => {
const res1 = await promiseMethod();
const res2 = await nextPromise(res1);
return res2;
// ??? Where to return the promise?
});
,数字("year"
),对象(2014
中的东西)或其他数组({}
中的东西)。 []
不是其中之一,它不是基本值,因此不能成为数组的一部分。
JSON允许的另一件事是对象(例如"make":"Ford"
)-那些由字符串:值对组成,例如{"make":"Ford", "trim":"escape", "year":2014}
。
对象不是数组;数组不是对象。 JSON规范(https://www.json.org/)可能会有所帮助。
如果您真的想传递对象数组(如第一句话所述),则需要有多个单独的对象-不是"make:"Ford"
,而是["make":"Ford", "trim":"escape", "year":2014]
-那个< / em>将是三个独立的不相关对象的数组。
答案 3 :(得分:1)
可能是您来自拥有associative arrays的PHP吗?
如果您想在JavaScript中使用类似的东西,只需使用对象!
如果car
的值应直接包含属性,则应使用以下表示法:
"car": {"make":"Ford", "trim":"escape", "year":2014 }
在JavaScript中,对象和数组是不同的种类:数组是有序列表,仅按数字索引(其索引范围为0
至length - 1
),对象是具有命名属性的无序结构(例如“ make”,“ trim”和“ year”)。对象也支持属性列表/枚举,但这是另一回事。
每个值都属于JSON中的一些基本类型。
基本上有字符串,数字,布尔值,数组,对象或null
,但不多。 (JavaScript有undefined
或符号等附加符号。)
每个数组条目和每个对象属性(如果用JavaScript对象表示法(JSON)写下),就像您要尝试做的一样,必须是这些类型之一。
特别是,将数组写为以逗号分隔的值列表。显然,您的示例"make":"Ford"
不是单个值,而是对象中属性值分配的表示法。
我找到了有关JSON的一些教程: https://www.digitalocean.com/community/tutorials/an-introduction-to-json
答案 4 :(得分:1)
{}表示对象,而[]表示数组。
如果玩家只能拥有一辆汽车,则可以将数据更改为以下示例。
player = {
"name":"John",
"age":30,
"car": {"make":"Ford", "trim":"escape", "year":2014 }
}
但是,如果玩家可以拥有许多汽车,那么您应该按照代码示例将对象放置在数组中。
[{"make":"Ford", "trim":"escape", "year":2014 }]
数组每个条目只能存储一种数据类型,例如array ['string','number','object']。
但是,您会发现数组通常是由一种数据类型构成的,例如array ['string','string','string']。
在这里,数组(用于存储项目列表)和对象(用于封装列表项目的数据)的组合可以很好地协同工作。
如何设计播放器变量的示例:
player = {
"name":"John",
"age":30,
"cars": [
{"make":"Ford", "trim":"escape", "year":2014 },
{"make":"Audi", "trim":"escape", "year":2017 },
{"make":"Seat", "trim":"escape", "year":2018 }
]
}
然后我们可以使用如下语法来访问每个对象:
const firstCar = player.cars[0];
const audi = player.cars[1];
const lastCar = player.cars[player.cars.length - 1];
希望这对您的Web应用程序/网站有帮助:)