Java 为什么 Json 测试程序不起作用?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/18282872/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-12 00:01:22  来源:igfitidea点击:

Why Json test program doesn't work?

javajsonglassfish

提问by Frank

When I run a Json test program with jdk 7, it says :

当我使用 jdk 7 运行 Json 测试程序时,它说:

Exception in thread "main" javax.json.JsonException: Provider org.glassfish.json.JsonProviderImpl not found
    at javax.json.spi.JsonProvider.provider(JsonProvider.java:97)
    at javax.json.Json.createArrayBuilder(Json.java:257)"

I've included "javax.json-api-1.0.jar" in my project.

我在我的项目中包含了“javax.json-api-1.0.jar”。

import javax.json.Json;
import javax.json.JsonArray;
import javax.json.JsonArrayBuilder;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class JsonExample
{
  public static void main(String[] args)
  {
    List<User> users=getUsers();

    // build JSON
    JsonArrayBuilder jsonArrayBuilder=Json.createArrayBuilder();
    for (User user : users)
    {
      jsonArrayBuilder.add(
        Json.createObjectBuilder()
        .add("id",user.getId())
        .add("name",user.getName())
        .add("join",user.getJoin().getTime()));
    }

    JsonArray usersJson=jsonArrayBuilder.build();

    System.out.println(usersJson.toString());

  }

  // dummy users
  public static List<User> getUsers()
  {
    List<User> users=new ArrayList<User>(10);
    User user=new User();
    user.setId(1);
    user.setName("Hero");
    user.setJoin(new Date());
    users.add(user);

    user=new User();
    user.setId(2);
    user.setName("Citizen");
    user.setJoin(new Date());
    users.add(user);

    return users;
  }

  // POJO
  public static class User implements Serializable
  {
    private long id;
    private String name;
    private Date join;

    public long getId()
    {
      return id;
    }

    public void setId(long id)
    {
      this.id=id;
    }

    public String getName()
    {
      return name;
    }

    public void setName(String name)
    {
      this.name=name;
    }

    public Date getJoin()
    {
      return join;
    }

    public void setJoin(Date join)
    {
      this.join=join;
    }
  }
}

It's a simple program, not using galssfish, why is glassfish mentioned here ?

这是一个简单的程序,没有使用galssfish,为什么这里提到glassfish?

采纳答案by anubhava

javax.json-api-1.0.jarcontains only API which is there for compile time dependency. But if you want to run your app, you need a provider / implclasses.

javax.json-api-1.0.jar仅包含用于编译时依赖的 API。但是如果你想运行你的应用程序,你需要一个provider / impl类。

org.glassfish:javax.jsonis the jar you need that contains both api+ implclasses.

org.glassfish:javax.json是您需要的包含api+impl类的 jar 。

<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.json</artifactId>
    <version>1.0.4</version>
</dependency>

See this thread for more details.

有关更多详细信息,请参阅此线程