首页 文章

播放Java,如何读取本地JSON文件并在正文中显示为列表?

提问于
浏览
0

我开始学习Play Java,并发现许多不同的样本(通常没有进口等),关于如何做主题解释 . 我正在使用Play 2.5和JDK 8,并配置了我自己的控制器 . 该文件位于我可以从控制器Java类访问的目录中,但我不清楚读取JSON文件的最佳做法是什么:通过Jackson?还是java.io. *函数?是否有可能从专家那里获得最小的工作样本?我尝试按照本指南,但代码总是出错(示例代码既没有最终的逗号!):https://www.playframework.com/documentation/2.5.x/JavaJsonActions

基本上我的json items.json在..workspace \ play-java \ app \ data \ items.json下 .

JSON文件是这样的:[{“id”:10000000,“name”:“name1”,“starttime”:“2015-06-18T06:26:56-07:00”,“endtime”:“2015 -07-08T12:47:16-07:00“}等]

我想在读取文件的函数中我需要指定路径'app / data / items.json'或'data / items.json'

提前致谢!

2 回答

  • 3

    如果要将JSON传递给客户端,可以使用 Json 类将输入流(或字符串)转换为 JsonNode ,并将其直接传递回响应中 . 因为您正在使用 JsonNode ,所以将自动设置将作为响应的内容类型 .

    (对于此示例,我在 /conf 中创建了一个名为 foo.json 的文件 . )

    package controllers;
    
    import java.io.IOException;
    import java.io.InputStream;
    import javax.inject.Inject;
    import com.fasterxml.jackson.databind.JsonNode;
    import play.Environment;
    import play.libs.Json;
    import play.mvc.Controller;
    import play.mvc.Result;
    
    public class SomeController extends Controller {
    
        private final Environment env;
    
        @Inject
        public SomeController(final Environment env) {
            // the environment is used to access local files
            this.env = env;
        }
    
        public Result index() {
            try (InputStream is = env.resourceAsStream("/foo.json")) {
                final JsonNode json = Json.parse(is);
                return ok(json);
            } catch (IOException e) {
                return internalServerError("Something went wrong");
            }
        }
    }
    
  • 1

    我用这个基本代码自己解决了:

    package controllers;
    
    import com.fasterxml.jackson.databind.JsonNode;
    import play.Environment;
    import play.libs.Json;
    import play.mvc.Controller;
    import play.mvc.Result;
    
    import javax.inject.Inject;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    
    
    public class CustomersController extends Controller {
    
    
        private final Environment env;
    
        @Inject
        public CustomersController(final Environment env) {
            // the environment is used to access local files
            this.env = env;
        }
    
        public Result index() {
            File file = new File("absolute path/items.json");
    
            try (
                    FileInputStream is =new FileInputStream(file);
            ){
                final JsonNode json = Json.parse(is);
                return ok(json);
            } catch(IOException e){
                return internalServerError("Something went wrong");
            }
        }
    }
    

相关问题