如果您想了解将JSON解组到地图中和将json解组到地图中的知识,那么本篇文章将是您的不二之选。我们将深入剖析将JSON解组到地图中的各个方面,并为您解答将json解组到地图中的疑在这篇文章中,我们将
如果您想了解将JSON解组到地图中和将json解组到地图中的知识,那么本篇文章将是您的不二之选。我们将深入剖析将JSON解组到地图中的各个方面,并为您解答将json解组到地图中的疑在这篇文章中,我们将为您介绍将JSON解组到地图中的相关知识,同时也会详细的解释将json解组到地图中的运用方法,并给出实际的案例分析,希望能帮助到您!
本文目录一览:- 将JSON解组到地图中(将json解组到地图中)
- Java Streams:将列表分组到地图地图
- Java如何通过不导入第三方的json解析包将json串转为 Map
- JSON 数字在解组到接口后被截断
- json解组嵌入式结构
将JSON解组到地图中(将json解组到地图中)
我有一个非常简单的JSON文件,类似这样,但是有成千上万个字符串:
{"fruits":["apple","banana","cherry","date"]}
我想把水果装入一个
map[string]interface{}
最好的方法是什么?有没有一种方法我不需要遍历每个元素并使用循环插入到地图中?
答案1
小编典典这是示例,您可以在没有任何结构的情况下解组字符串列表。
package mainimport "fmt"import "encoding/json"func main() { src_json := []byte(`{"fruits":["apple","banana","cherry","date"]}`) var m map[string][]string err := json.Unmarshal(src_json, &m) if err != nil { panic(err) } fmt.Printf("%v", m["fruits"][0]) //apple }
或者可以使用字符串列表代替字符串列表 map[string][]interface{}
Java Streams:将列表分组到地图地图
假设我有以下类:
class Foo { Bar b; } class Bar { String id; String date; }
我有一个列表< Foo>并且我想将其转换为Map< Foo.b.id,Map< Foo.b.date,Foo> ;. I.e:首先由Foo.b.id组合,然后由Foo.b.date组合. 我正在努力使用以下两步法,但第二个甚至不编译:
Map<String,List<Foo>> groupById = myList .stream() .collect( Collectors.groupingBy( foo -> foo.getBar().getId() ) ); Map<String,Map<String,Foo>> output = groupById.entrySet() .stream() .map( entry -> entry.getKey(),entry -> entry.getValue() .stream() .collect( Collectors.groupingBy( bar -> bar.getDate() ) ) );
提前致谢.
解决方法
Map<String,Foo>> map = list.stream() .collect(Collectors.groupingBy(f -> f.b.id,Collectors.toMap(f -> f.b.date,Function.identity())));
使用静态导入保存一些字符:
Map<String,Foo>> map = list.stream() .collect(groupingBy(f -> f.b.id,toMap(f -> f.b.date,identity())));
Java如何通过不导入第三方的json解析包将json串转为 Map
利用sdk里面的 org.json.JSONObject 进行相关操作。
JSON 数字在解组到接口后被截断
在开发过程中,我们经常会使用JSON格式来传输数据。然而,有时候我们会发现在解组JSON数据到接口后,数字数据会被截断。这是一个很常见的问题,但却很容易被忽视。在本文中,php小编子墨将详细介绍这个问题的原因,以及如何避免和解决这个问题,确保数字数据的完整性和准确性。
问题内容
所以我有一个包含许多字段的 json,并且我按照建议循环遍历它 如何有效地更改 json 键 删除一些我不需要的键。但是删除后,现有json的原始值发生了变化,其中一些似乎是浮点数,我做了一个演示来展示它。
如何改变这种行为?是 interface{} 导致了该问题吗?为什么1684366653200744506被截断为1684366653200744400?
谢谢!
https://go.dev/play/p/x2auwqwb2fl
作为参考,输出 json 更改为 1684366653200744400
2009/11/10 23:00:00 1684366653200744448.000000 2009/11/10 23:00:00 map[timestamp:1.6843666532007444e+18] 2009/11/10 23:00:00 json Marshal from maps of key string and value interface to batch json for insert to DB 2009/11/10 23:00:00 {"timestamp":1684366653200744400}
解决方法
这是因为默认情况下,encoding/json 包将 float64 存储在 json 数字的接口值中。请参阅 json.unmarshal:
要将 json 解组为接口值,unmarshal 将以下内容之一存储在接口值中:
- bool,用于 json 布尔值
- float64,用于 json 数字
- ...
您可以创建解码器并调用 (*decoder).usenumber改变行为:
jsonBatch := `{"timestamp":1684366653200744506, "todelete":"string value or boolean value"}` dec := json.NewDecoder(strings.NewReader(jsonBatch)) dec.UseNumber() var i interface{} if err := dec.Decode(&i); err != nil {
参见https://www.php.cn/link/3a6c2c9231df58107434b942fa600b22.
以上就是JSON 数字在解组到接口后被截断的详细内容,更多请关注php中文网其它相关文章!
json解组嵌入式结构
我想解组结构Outer
定义为:
type Outer struct { Inner Num int}type Inner struct { Data string}func (i *Inner) UnmarshalJSON(data []byte) error { i.Data = string(data) return nil}
使用json.Unmarshal(data,&Outer{})
似乎只对使用Inner
的UnmarshalJSON
,而忽略了Num
场:https://play.golang.org/p/WUBfzpheMl
我有一个笨拙的解决方案,我Num
可以手动设置该字段,但是我想知道是否有人可以使用一种更清洁或更简单的方法来进行设置。
谢谢!
答案1
小编典典发生这种情况Inner
是因为嵌入在中Outer
。这意味着当json库调用unmarshaler时Outer
,它最终以on调用了Inner
。
因此,在内部func (i *Inner) UnmarshalJSON(data[]byte)
,data
参数包含整个json字符串,然后Inner
仅对其进行处理。
您可以通过Inner
在Outer
Outer struct { I Inner // make Inner an explicit field Num int `json:"Num"`}
工作实例
今天的关于将JSON解组到地图中和将json解组到地图中的分享已经结束,谢谢您的关注,如果想了解更多关于Java Streams:将列表分组到地图地图、Java如何通过不导入第三方的json解析包将json串转为 Map、JSON 数字在解组到接口后被截断、json解组嵌入式结构的相关知识,请在本站进行查询。
本文标签: