Value của một key trong json phụ thuộc vào value của một key khác

Hi all,
Mình nhận được response từ server định dạng như sau:

{
    "action":"add",
    "domain":"schedule",
    "params":{
        "add1":"v1",
        "add2":"v2",
        "add3":"v3"
    }
}

Và mình có rất nhiều domain ( khoảng 15), mỗi “domain” lại có khoảng 8 “action”. Và các key trong value của “params” bị phụ thuộc vào value của “action”.
Ví dụ action = “remove” --> param có key {“remove1”, “remove2”, “remove3”,…},…

Vậy cho mình hỏi, làm sao để get value của “params” theo “action” rồi đổ giá trị vào Model sử dụng Gson. ( Mình sử dụng mô hình MVP)
Rất mong nhận được sự giúp đỡ từ các bạn.

Minh chưa làm android bao giờ?
Nếu bạn xài javascript mà tên biến trong params giống vs tên action(khác 1, 2, 3…) thì bạn tham khảo cái này

var data = {
    "action":"add",
    "domain":"schedule",
    "params":{
        "add1":"v1",
        "add2":"v2",
        "add3":"v3"
    }
}

function readData(data){
    var actionNm = data.action;
	for(var i =1; i <= Object.keys(data.params).length; i++){
		
		eval("console.log(data.params." + actionNm + i + ");");
	}
}

readData(data);

@Yii, Cái này mình dùng trong Android, với cả key trong param là k có quy luật đâu, có thể tên tùy biến do server trả về, mình chỉ lấy ví dụ thế thôi :smiley:

1 Like

Java không thể add property động được như các ngôn ngữ script đâu nên nếu muốn handle tất cả param cho tất cả domain của bạn thì bạn nên chuyển nó sang Map<String, Object> rồi get key - value ra tương ứng thôi.

Bạn tọa ra các class lần lượt cho từng action với các param tương ứng.

Sau đó đăng kí sự kiện này cho GSON
registerTypeAdapter

Ví dụ

        GsonBuilder gsonBuilder = new GsonBuilder()
                .registerTypeAdapter(BaseTimeLineItem.class, new TimeLineDeserializer());

Ở đây có class TimeLineDeserializer bạn tạo ra và implement JsonDeserializer

Sau đó trong override của method deserialize, bạn sử dụng parse tay thông thường để trỏ về class tương ứng đã tạo thông qua từng action.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?