แปลง json สองประเภทให้เป็นวัตถุเดียวกัน

ฉันกำลังเขียนเฟรมเวิร์กสำหรับ API บริการเว็บที่ส่งคืน json ฉันใช้ไลบรารี Jackson เพื่อดีซีเรียลไลซ์สตริง json API ส่งคืนคุณสมบัติเพื่อดึงผลลัพธ์ของคำขอต่อไป การตอบสนองเช่นนี้:

{
    continueToken:"token",
    results: [ 
                {
                },
             ]
}

คำตอบทั้งหมดมีโครงสร้างนี้ ปัญหาเดียวคือชื่อของคุณสมบัติ Continue นั้นแตกต่างจากคำขออื่น ชื่อก็ประมาณนี้

prefix + "continue"

ฉันต้องการสร้างเพียงคลาสเดียวและสามารถแมป json กับคลาสนี้ได้ ฉันจะทำเช่นนั้นได้อย่างไร? นี่คือสิ่งที่ฉันต้องการ:

public class Response {
    private String continueToken;
    private List<Article> results;

    public Response (String continueToken, Article[] articles) {
         this.continueToken = continueToken;
         this.results = Arrays.asList(articles);
    }
}
//Here the name is ttcontinue
String json = request.get(type1);
Response r = jsonToResponse(json);

//Here the name is llcontinue
json = request.get(type2);
r = jsonToResponse(json);

person Hunsu    schedule 06.01.2015    source แหล่งที่มา
comment
คำถามของคุณทำให้เกิดความสับสน ดังนั้นการตอบสนองทั้งหมดจึงมีตัวแปร continueToken แต่คำขอมีชื่อตัวแปรที่แตกต่างกันซึ่งจะต้องส่งผ่าน continueToken ? คุณไม่สามารถนำโทเค็นจากการตอบกลับแล้วส่งผ่านไปยังตัวแปรที่ถูกต้องในคำขอแล้วทำให้เป็นอนุกรมไปยัง json ได้หรือไม่   -  person Deepak Bala    schedule 06.01.2015


คำตอบ (1)


อืม.. คุณมีชื่อฟิลด์ไดนามิก โซลูชันคำอธิบายประกอบไม่สามารถทำงานได้ สมมติว่าไม่มีฟิลด์ JSON อื่นที่ลงท้ายด้วย "ดำเนินการต่อ" (ซึ่งอยู่ในตัวอย่างของคุณ) คุณสามารถทำตามขั้นตอนเหล่านี้:

  1. วนซ้ำคีย์ JSON เช่นเดียวกับในโพสต์นี้
  2. ใช้ field.getKey().endsWith("continue") เพื่อค้นหาคีย์ที่คุณต้องการ
  3. แทนที่คีย์ในโหนด JSON โดยใช้โค้ดจาก โพสต์นี้กับ "continueToken"
  4. ตอนนี้รับวัตถุ Response ของคุณ
person Kostas Chalkias    schedule 06.01.2015