如何从JSON对象获取特定值(例如名称)?

时间:2019-06-05 00:25:06

标签: json angular typescript http glassfish

我将Angular用作应用程序的前端。对于后端,我使用glassfish。我目前使用Http GET动词获取具有ID,名称和地址的JSON对象。我只想获取对象的名称,如何在打字稿文件中进行处理?如何获得其余服务器的最新添加对象的名称?

我想从对象中获取restaurantName:

{ restaurantId: 1, restaurantName: 'Mcdonalds', restaurantAdres: 'Kalverstraat 5' },

从其余服务器检索对象的代码:

   ngOnInit() {
    this.http.get('http://localhost:8080/aquadine-jee/resources/restaurant')
      .subscribe(
        val => {
          const restStr = JSON.stringify(val);
          console.log(restStr);

    );

后端代码:

@GET

  @Produces("application/json")
  public Response all(){
    List<Restaurant> all = repositoryService.getAllRestaurants();
    return  Response
      .status(200)
      .header("Access-Control-Allow-Origin", "*")
      .entity(all)
      .build();
  }
 public List<Restaurant> getAllRestaurants() {
    EntityManager em = entityManagerFactory.createEntityManager();
    List<Restaurant> restaurants = em.createQuery("SELECT r FROM Restaurant r").getResultList();
    em.close();
    return restaurants;
  }
@Entity
@Table(name = "restaurant")
@NamedQueries({
  @NamedQuery(name = "Restaurant.findOne", query = "select m from Restaurant m where m.id = :id"),
  @NamedQuery(name = "Restaurant.getAll", query = "select m from Restaurant m")
})
public class Restaurant implements Serializable {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Integer id;



//    @Column(name="naam")
//    @NotBlank
//    private String naam;

  //    @NotBlank
  String restaurantName;


  //    @NotBlank
  String restaurantAdres;


  int restaurantId;

  public Restaurant(){

  }


  public Restaurant(int restaurantId, String restaurantName, String restaurantAdres) {
    this.restaurantId = restaurantId;
    this.restaurantName = restaurantName;
    this.restaurantAdres = restaurantAdres;
  }

1 个答案:

答案 0 :(得分:0)

首先,我将创建一个类以及一个接口,以在TypeScript中为您提供强类型对象:

然后,您可以从get请求中返回该对象作为该对象,并根据需要使用它,例如result.restaurantName

快速模拟一下外观(使用存根方法而不是http)is here:

简而言之:

Angular的类和接口:

export interface IRestaurant {
   restaurantId: number;
   restaurantName: string;
   restaurantAddres: string;
}

export class Restaurant implements IRestaurant {
    restaurantId:number;
    restaurantName:string;
    restaurantAddres:string;
}

然后是通过一种方法获取数据并实质上使用JSON作为对象的组件:

export class AppComponent  {
favoriteRestaurant: IRestaurant;

  retrieve(){
    this.favoriteRestaurant = this.getRestaurant();

    alert(this.favoriteRestaurant.restaurantName);
  }

  getRestaurant():IRestaurant {
    var result: Restaurant = {
       restaurantId: 1, 
       restaurantName: 'Mcdonalds',
       restaurantAddres: 'Kalverstraat 5'
    };

    return result;
  }
}

不过,让它对您更有用,将http.get方法更改为以下内容:

ngOnInit() {
    this.http.get('http://localhost:8080/aquadine-jee/resources/restaurant')
      .subscribe(
        val:IRestaurant => {
          this.favoriteRestaurant = val;
          console.log(restStr.restaurantName);    
    );

您不想使用上面的JSON.stringify,因为那样会给您一个字符串! 此外,您的restaurantAddress拼写错误,需要完全匹配。所以我会更正后端。