将JSON字符串转换为JSON对象以获取值

时间:2018-08-29 07:45:32

标签: java jsp

我正在获取JSON字符串,并希望通过JSP在控制台上打印Name值。有人可以建议如何做吗?

String AllCustomLockingCriterias = '{"TemplateArray":[{"Id":16,"Name":"Machine","type":"PM"},
                                      {"Id":17,"Name":"Ethernet","type":"PM"},
                                      {"Id":18,"Name":"Hard Disk","type":"PM"}]}';

我需要的输出:

Machine
Ethernet
Hard Disc

我想开始一个循环,我的输出将是:

Machine
Ethernet
Hard Disc

3 个答案:

答案 0 :(得分:1)

  1. 使用Gson jar包(由google.com生产),FastJson(由alibaba.com产生)或jackson来序列化或反序列化json字符串和Class对象。一个jar包就足够了。
  2. 使用maven pom依赖项/渐变配置将gson添加到您的项目中,或将gson jar直接添加到您的lib文件夹中,这完全取决于您,首选maven。
  3. 使用您的json字符串中的元信息(例如'id','name','type')定义Java类字段成员。Java类可以命名为'Template'(不要忘记实现Java可序列化的界面)。
  4. 代码示例:
Gson gson = new Gson();
TypeToken typeToken = new TypeToken<List<Template>>() {};
Type type = typeToken.getType();
List<Template> templates = gson.fromJson(json, type);
  1. 将模板列表返回到jsp页面范围内的前jsp页面。 如果您使用springMVC框架,则可以将模型参数添加到方法参数中,
@RequestMapping(value = "/test",method = RequestMethod.GET)
public String test(Model model){
    model.addAttribute("templates",templates);
    return "jspFileName";
}
  1. 对于jsp网站,您可以使用jsp EL Express显示列表
<c:forEach items="${templates}" var = "template">  
         ${template.name}
    </c:forEach>
  1. 最后但最简单的方法是,您可以将json字符串传递到jsp页面。换句话说,不需要将json字符串序列化为class,只需将字符串传递给具有model属性的jsp由springMVC甚至是基本的Servlet提供。然后使用javascript方法处理json字符串。例如,
var obj = JSON.parse(json);
var array = obj.TemplateArray;
array.foreach(function(item) {
  console.log(item.name);
});

答案 1 :(得分:0)

JsonNodeJPointer一起使用。

示例:

ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readValue(
                    "{\"TemplateArray\":[{\"Id\":16,\"Name\":\"Machine\",\"type\":\"PM\"}, {\"Id\":17,\"Name\":\"Ethernet\",\"type\":\"PM\"},{\"Id\":18,\"Name\":\"Hard Disk\",\"type\":\"PM\"}]}",
                    JsonNode.class);

node.at("/TemplateArray").forEach(a -> System.out.println(a.at("/Name")));

打印:

"Machine"
"Ethernet"
"Hard Disk"

答案 2 :(得分:0)

“ fasterxml”或“ jackson”具有Java库,该库能够将JSON字符串转换为TreeNode。然后,您可以访问各个字段。

@Test
public void test() throws IOException {
    String AllCustomLockingCriterias = "{\"TemplateArray\":[{\"Id\":16,\"Name\":\"Machine\",\"type\":\"PM\"},\n" +
            "                   {\"Id\":17,\"Name\":\"Ethernet\",\"type\":\"PM\"},\n" +
            "                  {\"Id\":18,\"Name\":\"Hard Disk\",\"type\":\"PM\"}]}";


    //create mapper to map JSON string to handy Java object
    ObjectMapper objectMapper = new ObjectMapper();
    JsonNode rootNode = objectMapper.readValue(AllCustomLockingCriterias,JsonNode.class);

    //fetch value that has field name "TemplateArray"
    JsonNode templateArray = rootNode.get("TemplateArray");

    //loop over the values in the TemplateArray and extract Name, if present.
    for(JsonNode subNode : templateArray){
        if(subNode.has("Name")){
            System.out.println(subNode.get("Name"));
        }
    }
}