首页 > 解决方案 > 如何在java中添加动态值作为对象字段名称?

问题描述

** 询问**

@PostMapping("/students/create")
    public Student  postCandidate(@RequestBody Student  student) {

        Student  _student = repository.save(new Student  (student.getStudentname(), student.setRollno()));
        return _student;
    }

代码:

public class Student  {
    private String studentname;
    private int rollno;
    public Student(int rollno, String studentname) {
         this.rollno = rollno;
         this.studentname = studentname;
    }

    public String getStudentname() {
         return studentname;
    }
    public void setStudentname(String studentname) {
    this.studentname = studentname;
    }
    public int getRollno() {
    return rollno;
    }
    public void setRollno(int rollno) {
    this.rollno = rollno;
    }
}

而不是得到 rollno ="123" 我想获得我通过的动态数据:“ram”="123'

例子:

{studentname:john, john:"123"},
{studentname:Ram, Ram:"124"}

标签: javajsonclassgetter-setter

解决方案


您可以使用任何 JSON 库来读取 json 数据。

1) 读取 value 键studentname以获取学生姓名。2)读取key的值student's name from #1

此外,有问题提供的 json 无效。我假设正确的 json 是

[
  {
    studentname: "john",
    john: "123"
  },
  {
    studentname: "Ram",
    Ram: "124"
  }
]

我尝试使用 GSON 库:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;

public class GsonTest {

    private static String json = "JSON STRING HERE";

    public static void main(String[] args) {
        Gson gson = new GsonBuilder().create();
        JsonElement jsonElement = gson.fromJson(json, JsonElement.class);
        JsonArray array = jsonElement.getAsJsonArray();
        Iterator<JsonElement> iterator = array.iterator();

        List<Student> students = new ArrayList<Student>();
        while (iterator.hasNext()) {
            JsonObject item = iterator.next().getAsJsonObject();
            // Roll No is read by reading dynamic key which is student name
            Student student = new Student(item.get(item.get("studentname").getAsString()).getAsInt(), item.get("studentname").getAsString());
            students.add(student);
        }
        students.forEach(item -> {
            System.out.println("Name : " + item.getStudentname() + " Roll No : " + item.getRollno());
        });
    }

}

输出:

Name : john Roll No : 123
Name : Ram Roll No : 124

推荐阅读