有人很可能会指出这上面有一个复制品.但我已经找过了.关于这个问题有很多问题,但我似乎没有一个真正能帮上忙.
我交付的JSON(来自Elasticearch)的 struct 如下所示:
当我离开时:
let json_hashmap: HashMap<String, Value> = serde_json::from_str(&text).unwrap();
我明白了:
{
"hits": Object {
"hits": Array [
Object {
"_id": String("Ybgt6ooBpXznUptX4lR2"),
"_index": String("booby"),
"_score": Number(1.0),
... (other keys)
],
... (multiple other hit-hit Objects in the Array)
],
... (other keys)
}
"key2": String("my arbitrary string value"),
"key3": Number(1.0),
... (other keys)
}
这并不是说键和一组热门的"词典"是不可预测的.我可以为这些畅销词典想出struct
分.但是,我如何才能真正获得热门点击数组呢?
因为可以看出,0级词典(外词典)具有一个关键字,该关键字被解码为包含内-内词典数组的内词典("1")("2").
但是,0级词典有"Hits"以外的关键字,这些关键字可以解码为其他值.并且实际上,级别1词典还可以具有除"HITS"之外的关键字.
有没有一种方法可以规定"0级"(外部)词典中的one particular key解码为HashMap<String, Value>
,而该词典中的one particular key解码为Vec<MyStruct>
?
注意,如果我go ,我可以访问某个对象
let outer_hits = &json_hasmap["hits"];
let inner_hits = &outer_hits["hits"];
使用{:#?}
打印此命令将显示以下内容:
Array [
Object {
"_id": String("Ybgt6ooBpXznUptX4lR2"),
"_index": String("booby"),
"_score": Number(1.0),
"_source": Object {
"docx_id": Number(14),
"last_modif_ms": Number(1596958203000),
"ldoc_type": String("docx_doc"),
"path": String("D:\\My Documents\\doc\\IT_Diary\\IT Diary $UPD 2018-03.docx"),
},
},
Object {
...
...但是,例如,尽管这被认为是类型Array
,但是我try 的Go inner_hits.len()
不能编译:我得到"^方法Not Found in &Value
".奇怪的"数组".我怎样才能提取出更有用的东西?
最开始的text
是:
{
"_scroll_id": "FGluY2x1ZGVfY29udGV4dF91dWlkDnF1ZXJ5VGhlbkZldGNoBxZQcGUxbjhnQ1RzU0M1bG1ZR05od1VBAAAAAAAAASAWbkU3ck5YUTNSazZlazJtUXctSklWQRZQcGUxbjhnQ1RzU0M1bG1ZR05od1VBAAAAAAAAASEWbkU3ck5YUTNSazZlazJtUXctSklWQRZQcGUxbjhnQ1RzU0M1bG1ZR05od1VBAAAAAAAAASIWbkU3ck5YUTNSazZlazJtUXctSklWQRZQcGUxbjhnQ1RzU0M1bG1ZR05od1VBAAAAAAAAASMWbkU3ck5YUTNSazZlazJtUXctSklWQRZQcGUxbjhnQ1RzU0M1bG1ZR05od1VBAAAAAAAAASQWbkU3ck5YUTNSazZlazJtUXctSklWQRZQcGUxbjhnQ1RzU0M1bG1ZR05od1VBAAAAAAAAASUWbkU3ck5YUTNSazZlazJtUXctSklWQRZQcGUxbjhnQ1RzU0M1bG1ZR05od1VBAAAAAAAAASYWbkU3ck5YUTNSazZlazJtUXctSklWQQ==",
"took": 3,
"timed_out": false,
"_shards": {
"total": 10,
"successful": 10,
"skipped": 3,
"failed": 0
},
"hits": {
"total": {
"value": 5303,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "booby",
"_id": "Ybgt6ooBpXznUptX4lR2",
"_score": 1,
"_source": {
"docx_id": 14,
"last_modif_ms": 1596958203000,
"ldoc_type": "docx_doc",
"path": "D:\\My Documents\\doc\\IT_Diary\\IT Diary $UPD 2018-03.docx"
}
},
{
"_index": "booby",
"_id": "jLgt6ooBpXznUptX4lSG",
"_score": 1,
"_source": {
"docx_id": 12,
"last_modif_ms": 1596958248000,
"ldoc_type": "docx_doc",
"path": "D:\\My Documents\\doc\\IT_Diary\\IT Diary $UPD 2018-01.docx"
}
},
{
"_index": "booby",
"_id": "1bgt6ooBpXznUptX4lSX",
"_score": 1,
"_source": {
"docx_id": 20,
"last_modif_ms": 1596958053000,
"ldoc_type": "docx_doc",
"path": "D:\\My Documents\\doc\\IT_Diary\\IT Diary $UPD 2018-09.docx"
}
},
{
"_index": "booby",
"_id": "7rgt6ooBpXznUptX4lSm",
"_score": 1,
"_source": {
"docx_id": 21,
"last_modif_ms": 1596958032000,
"ldoc_type": "docx_doc",
"path": "D:\\My Documents\\doc\\IT_Diary\\IT Diary $UPD 2018-10.docx"
}
},
{
"_index": "booby",
"_id": "_rgt6ooBpXznUptX4lS2",
"_score": 1,
"_source": {
"docx_id": 22,
"last_modif_ms": 1596957990000,
"ldoc_type": "docx_doc",
"path": "D:\\My Documents\\doc\\IT_Diary\\IT Diary $UPD 2018-11.docx"
}
}
]
}
}