Aja*_*han 2 java deprecated mongodb mongo-java-driver jsonparser
当我使用 MongoDB 2.xx 时,我曾经(BasicDBList) JSON.parse("[]")将字符串数据解析为 Document 数组。但是最新的 MongoDB 驱动程序说这已被弃用,BasicDbObject.parse("")唯一的转换为BasicDBObject.
这是我之前在 2.xx Java 驱动程序中使用的一些代码示例
BasicDbList skuList = (BasicDBList) JSON.parse(skus);
Run Code Online (Sandbox Code Playgroud)
所以当我升级到 3.6.1 时,编译器说这已被弃用。并建议使用BasicDbObject.parse()
但这只接受 JSON 对象结构化的字符串......
{ "fruit": "apple"}
Run Code Online (Sandbox Code Playgroud)
...不是 JSON 数组格式的字符串。
所以,如果我有一个像"[\"SKU000001\", \"SKU0000002\", \"SKU0000003\"]"我如何转换为的字符串
BasicDBList?
JSON.parse() 能够处理 JSON 数组,它读取第一个字符,如果它认为 JSON 是一个数组,它会相应地处理它:
case '[':
value = parseArray(name);
break;
Run Code Online (Sandbox Code Playgroud)
BasicDBObject.parse() 需要一个有效的 JSON 文档,因此当给定一个孤立的 JSON 数组,即一个不包含在 JSON 文档中的 JSON 数组时,它会抛出异常。
BasicDBObject.parse() 可以处理这个...
{"a": ["SKU000001", "SKU0000002", "SKU0000003"]}
Run Code Online (Sandbox Code Playgroud)
...但它无法处理这个:
["SKU000001", "SKU0000002", "SKU0000003"]
Run Code Online (Sandbox Code Playgroud)
因此,MongoDB v3.x 驱动程序中没有直接替代用于JSON.parse()解析 JSON 数组。相反,您的选择是:
BasicDBObject.parse()通过在有效的 JSON 文档中呈现 JSON 数组来进行技巧,例如:
BasicDBObject basicDBObject = BasicDBObject.parse(String.format("{\"a\": %s}",
"[\"SKU000001\", \"SKU0000002\", \"SKU0000003\"]"));
BasicDBList parsed = (BasicDBList) basicDBObject.get("a");
assertThat(parsed.size(), is(3));
assertThat(parsed, containsInAnyOrder("SKU000001", "SKU0000002", "SKU0000003"));
Run Code Online (Sandbox Code Playgroud)使用 JSON 解析库读取 JSON 数组,然后使用反序列化结果创建一个BasicDBList,例如:
List<String> values = new ObjectMapper().readValue("[\"SKU000001\", \"SKU0000002\", \"SKU0000003\"]",
List.class);
BasicDBList parsed = new BasicDBList();
values.forEach(s -> parsed.add(s));
assertThat(parsed.size(), is(3));
assertThat(parsed, containsInAnyOrder("SKU000001", "SKU0000002", "SKU0000003"));
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
3116 次 |
| 最近记录: |