sách gpt4 ai đã đi

json - Chuyển đổi json phẳng thành json lồng nhau

In lại Tác giả: IT Prince Thời gian cập nhật: 2023-10-29 01:38:31 31 4
mua khóa gpt4 Nike

Hiện tại tôi đang sử dụng đoạn mã sau để chuyển đổi json lồng nhau thành json phẳng:

nhập khẩu (
"fmt"

"github.com/nytlabs/gojsonexplode"
)
hàm main() {
đầu vào := `{"người":{"tên":"Joe", "địa chỉ":{"phố":"123 phố Main"}}}`
ra, lỗi := gojsonexplode.Explodejsonstr(đầu vào, ".")
nếu err != nil {
// xử lý lỗi
}
fmt.Println(ra)
}

Đây là kết quả đầu ra:{"person.address.street":"123 Main St.","person.name":"Joe"}

Sau một số xử lý, bây giờ tôi muốn đưa dữ liệu này trở lại dạng JSON lồng nhau bình thường, nhưng tôi không thể làm được.

Tôi đoán gần đúng nhất là sử dụng bản đồ lồng nhau, nhưng tôi không biết cách tạo bản đồ lồng nhau với N cấp độ.

EDIT: Lý do tại sao tôi cần điều này: Tôi đang lưu trữ dữ liệu trong Redis, nếu tôi lưu trữ json vào Redis thì tôi sẽ không thể tìm kiếm các khóa, đó là lý do tại sao tôi chuyển đổi các khóa thành key1:key2:key3 lý do:some_value

1 Câu trả lời

Để "mở rộng" dữ liệu, bạn cần chia từng khóa tại các điểm và tạo các đối tượng lồng nhau. Đây là một ví dụChơi với dữ liệu của bạn trên Go Playground.

func unflatten(flat map[string]interface{}) (map[string]interface{}, lỗi) {
unflat := map[string]interface{}{}

đối với khóa, giá trị := phạm vi phẳng {
keyParts := strings.Split(khóa, ".")

// Đi qua các phím cho đến khi ta tới một nút lá.
m := không phẳng
đối với i, k := phạm vi keyParts[:len(keyParts)-1] {
v, tồn tại := m[k]
nếu !tồn tại {
newMap := map[string]giao diện{}{}
m[k] = Bản đồ mới
m = bản đồ mới
Tiếp tục
}

innerMap, ok := v.(map[string]interface{})
nếu !ok {
trả về nil, fmt.Errorf("key=%v không phải là một đối tượng", strings.Join(keyParts[0:i+1], "."))
}
m = Bản đồ bên trong
}

leafKey := keyParts[len(keyParts)-1]
nếu _, tồn tại := m[leafKey]; tồn tại {
trả về nil, fmt.Errorf("key=%v đã tồn tại", key)
}
m[keyParts[len(keyParts)-1]] = giá trị
}

trả về không phẳng, không có
}

Về json - chuyển đổi json phẳng thành json lồng nhau, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/46405557/

31 4 0
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com