如何将数组正确传递给JSON

时间:2018-08-20 23:03:40

标签: javascript json

在以下示例中,我试图将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数组,所以为什么需要将其包装在{}

5 个答案:

答案 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中,对象和数组是不同的种类:数组是有序列表,仅按数字索引(其索引范围为0length - 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应用程序/网站有帮助:)