En Angular2, podría tener una carpeta /data/ y un archivo json allí y podría acceder a él en localhost: 4200/data/something.json.
Esto ya no es posible en Angular4.
¿Alguna idea de cómo hacer que funcione?
puedes usar este codigo
@Injectable() export class AppServices{ constructor(private http: Http) { var obj; this.getJSON().subscribe(data => obj=data, error => console.log(error)); } public getJSON(): Observable<any> { return this.http.get("./file.json") .map((res:any) => res.json()) .catch((error:any) => console.log(error)); } } aquí file.json es su archivo json local.
ver aquí también
también vea el registro de cambios de angular-cli para la ruta
Por supuesto que es posible. Supongamos que aquí está su archivo json

Y aquí está tu código para llamar al json.
import { Injectable } from '@angular/core'; import { Http, Headers, Response } from '@angular/http'; import { Observable } from 'rxjs'; import 'rxjs/add/operator/map' @Injectable() export class YourService { constructor(private http: Http) { } getAdvantageData(){ let apiUrl = './assets/data/api/advantage.json'; return this.http.get(apiUrl) .map( (response: Response) => { const data = response.json(); return data; }); } }Estaba enfrentando el mismo problema, donde mi servicio Angular Observable estaba ubicado dentro de la carpeta 'src/app/' y estaba tratando de cargar un archivo JSON local. Traté de colocar el archivo JSON dentro de la misma carpeta de la aplicación, dentro de una nueva carpeta 'api', usé varios tipos de rutas relativas/absolutas, pero no funcionó y obtuve el error 404. En el momento en que lo puse dentro de la carpeta 'activos', funcionó. ¿Supongo que hay más?
Tal vez este enlace ayude: