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

时间:2016-09-01 08:45:15

标签: java json playframework playframework-2.5

我开始学习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 个答案:

答案 0 :(得分: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 :(得分: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");
        }
    }
}