Play Framework-如何在视图中遍历JsonNode的树?

Play Framework-如何在视图中遍历JsonNode的树?,json,playframework,playframework-2.3,twirl,Json,Playframework,Playframework 2.3,Twirl,您好,我正在尝试在视图中显示嵌套的JSON数据,类似于从API获得响应时它在中的显示方式 我发现它基本上要求我所要求的东西;但是,我希望使用Play Framework 2.3.x在视图中显示结果。我知道我需要一个递归函数来显示所有json对象,所以我尝试在视图中使用一个可重用的块。以下是我现在拥有的: @(fromAPI: com.fasterxml.jackson.databind.JsonNode) @import com.fasterxml.jackson.databind.JsonN

您好,我正在尝试在视图中显示嵌套的JSON数据,类似于从API获得响应时它在中的显示方式

我发现它基本上要求我所要求的东西;但是,我希望使用Play Framework 2.3.x在视图中显示结果。我知道我需要一个递归函数来显示所有json对象,所以我尝试在视图中使用一个可重用的块。以下是我现在拥有的:

@(fromAPI: com.fasterxml.jackson.databind.JsonNode)

@import com.fasterxml.jackson.databind.JsonNode

@walkJsonTree(name: String, node: JsonNode) = {

    @if(node.isObject()) {

        @for(nodeEntry <- node.fields()) {
            <li>@nodeEntry.getKey(): </li>
            <ul>@walkJsonTree(nodeEntry.getKey(), nodeEntry.getValue())</ul>
        }
    }
    @if(node.isArray()) {
        @for(arrayNode <- node.fields()) {
            <li>[List]: </li>
            <ul>@walkJsonTree(arrayNode.getKey(), arrayNode.getValue())</ul>
        }
    }
    @if(node.isValueNode()) {
        <li>@node.asText()</li>
    } else {
        @* other *@
        <li>@node.asText()</li>
    }

}

@main("API Response") {

    <div class="container">
        <h3>API Response</h3>

        <ul>
            @walkJsonTree(null, fromAPI)
        </ul>
    </div>
}
@(fromAPI:com.fasterxml.jackson.databind.JsonNode)
@导入com.fasterxml.jackson.databind.JsonNode
@walkJsonTree(名称:字符串,节点:JsonNode)={
@if(node.isObject()){
@对于(nodeEntry我的“array”
if
块有误。它应该使用
elements()
函数,而不是
fields()
。这是我的代码的更新版本,包括此重构和
  • 元素的其他清理

    @(fromAPI: com.fasterxml.jackson.databind.JsonNode)
    
    @import com.fasterxml.jackson.databind.JsonNode
    
    @walkJsonTree(name: String, node: JsonNode) = {
    
        @if(node.isObject()) {
            <ul>
                @for(nodeEntry <- node.fields()) {
                    <li>@nodeEntry.getKey(): @walkJsonTree(nodeEntry.getKey(), nodeEntry.getValue())</li>
                }
            </ul>
        }
        @if(node.isArray()) {
            <ul>
                @for(arrayNode <- node.elements()) {
                    <li>[List]: @walkJsonTree(name, arrayNode)</li>
                }
            </ul>
        }
        @if(node.isValueNode()) {
            @node.asText()
        } else {
            @* other *@
            @node.asText()
        }
    
    }
    
    @main("API Response") {
    
        <div class="container">
            <h3>API Response</h3>
            @walkJsonTree(null, fromAPI) 
        </div>
    }
    
    @(fromAPI:com.fasterxml.jackson.databind.JsonNode)
    @导入com.fasterxml.jackson.databind.JsonNode
    @walkJsonTree(名称:字符串,节点:JsonNode)={
    @if(node.isObject()){
    
      @为了(不去尝试)