json java =&gt中的逃生角色; JavaScript
问题是无效的JSON结构,并增加了逃生后斜线。
在我(JS)前端读取JSON的错误时,我从Jax-Rs Java球衣后端获取了错误。
- JSON结果: [JS]原始fetch(post)=> console.log()
Object { zoekopdracht: "{\"metadata\":{\"pagination\":{\"total\":2,\"pages\":1,\"rows\":1000,\"currentPage\":1}},\"person\":[{\"geo\":null,\"entity_uuid\":\"e0d8fc91-3e07-313a-e5d1-b35da2ea4f5d\",\"metadata\":{\"datum\":\"1956-00-00\",\"deed_type_title\":\"Registratie\",\"register_gemeente\":\"Amsterdam\",\"has_assets\":\"register\",\"person_display_name\":\"Harry Potter\",\"plaats\":\"Amsterdam\",\"ordering\":0,\"geslachtsnaam\":\"Potter\",\"register_type_title\":\"Archiefkaarten\",\"achternaam\":\"Potter\",\"modified_time\":\"2020-08-10T03:38:16.73421\",\"voornaam\":\"Harry\",\"type_title\":\"Geregistreerde\",\"filter_rol\":\"Geregistreerde\",\"datum_geboorte\":\"1956-00-00\",\"register_naam\":\"Archiefkaarten\"},\"location_name\":null,\"entity_type\":\"ams_person\",\"location\":null,\"id\":\"9853340f-d52e-56a3-e053-b784100ade19\",\"deed_id\":\"9853340f-d52d-56a3-e053-b784100ade19\",\"title\":\"\",\"register_id\":\"08ebb210-5812-b104-bbb6-24b8326b3ea3\",\"timestamp\":\"2021-11-07T16:56:19.552Z\"},{\"geo\":null,\"entity_uuid\":\"e0d8fc91-3e07-313a-e5d1-b35da2ea4f5d\",\"metadata\":{\"datum\":\"1933-00-00\",\"deed_type_title\":\"Registratie\",\"register_gemeente\":\"Amsterdam\",\"has_assets\":\"register\",\"person_display_name\":\"Harry Johan Potter\",\"plaats\":\"Amsterdam\",\"ordering\":0,\"geslachtsnaam\":\"Potter\",\"register_type_title\":\"Archiefkaarten\",\"achternaam\":\"Potter\",\"modified_time\":\"2020-08-15T10:51:18.555689\",\"voornaam\":\"Harry Johan\",\"type_title\":\"Geregistreerde\",\"filter_rol\":\"Geregistreerde\",\"datum_geboorte\":\"1933-00-00\",\"register_naam\":\"Archiefkaarten\"},\"location_name\":null,\"entity_type\":\"ams_person\",\"location\":null,\"id\":\"98533417-bc90-56a3-e053-b784100ade19\",\"deed_id\":\"98533417-bc8f-56a3-e053-b784100ade19\",\"title\":\"\",\"register_id\":\"08ebb210-5812-b104-bbb6-24b8326b3ea3\",\"timestamp\":\"2021-11-07T07:09:54.402Z\"}],\"links\":{\"person.detail\":\"https://webservices.picturae.pro/genealogy/person/{person.id}\"}}" }
确定,这是管道,
[js] fetch(post)=>拥有后端休息服务(Java),
[Java]然后进行后端fetch =>外部API(无控制),
[java]然后将其返回原始fetch(post),
[js]原始fetch(post)=> console.log()
沿线某个地方添加了各种后斜切,我已经通过阅读它来删除了许多。
- [js] fetch(post)=>拥有后端休息服务(Java),
const fetchOptions = {
method: 'POST',
body: JSON.stringify(jsonRequestBody),
headers: {
Authorization: `Bearer ${window.sessionStorage.getItem('JWT')}`,
Accept: 'application/json',
'Content-Type': 'application/json',
},
};
const feedbackSpan = document.getElementById('feedbackSpan');
fetch(`${localhost}restservices/search-advanced-service/`, fetchOptions)
.then(async (response) => {
if (response.status === 200) {
// er is een account gevonden !
const myJson = await response.json(); // return the search results incl changelog
console.log(myJson);
const myJsonString = JSON.stringify(myJson, null, 2);
console.log(myJsonString.replace('\\',''));
console.log(JSON.parse(myJson));
console.log(JSON.stringify(myJsonString));
}
if (response.status === 403) {
feedbackSpan.innerHTML = '<p>Check of je bent ingelogd!</p>';
}
})
.catch((err) => {
console.log('Error: ', err);
});
}
- [Java]然后进行后端fetch =&gt;外部API(无控制),
public JSONObject fetchSearchResultAsJson(String theURL) throws IOException {
URL url = new URL(theURL);
InputStream is = url.openStream();
int cursor = 0;
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is));
JSONTokener tokener = new JSONTokener(bufferedReader);
JSONObject json = new JSONObject(tokener);
is.close();
bufferedReader.close();
return json;
}
}
- [Java]然后将其返回到原始fetch(post),
@POST
@RolesAllowed("user")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("")
public Response advancedSearchProcess(SearchAdvancedInput searchQuery, @Context SecurityContext sc) {
System.out.println("advancedSearchProcess");
try {
for (String zoekUri : zoekopdracht.getZoekUris()) {
JSONObject resultaat = fetchSearchResultAsJson(zoekUri);
messages.put("zoekopdracht",
resultaat.toString()
);
}
return Response.ok().entity(messages).build();
} catch (Exception exception) {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(exception).build();
}
}
The problem is an invalid Json structure, with added escape backslashes.
Errors in reading out a JSON in my (js) front end, which I fetch from my JAX-RS JAVA Jersey backend.
- The JSON result:
[ js ] original fetch(POST) => console.log()
Object { zoekopdracht: "{\"metadata\":{\"pagination\":{\"total\":2,\"pages\":1,\"rows\":1000,\"currentPage\":1}},\"person\":[{\"geo\":null,\"entity_uuid\":\"e0d8fc91-3e07-313a-e5d1-b35da2ea4f5d\",\"metadata\":{\"datum\":\"1956-00-00\",\"deed_type_title\":\"Registratie\",\"register_gemeente\":\"Amsterdam\",\"has_assets\":\"register\",\"person_display_name\":\"Harry Potter\",\"plaats\":\"Amsterdam\",\"ordering\":0,\"geslachtsnaam\":\"Potter\",\"register_type_title\":\"Archiefkaarten\",\"achternaam\":\"Potter\",\"modified_time\":\"2020-08-10T03:38:16.73421\",\"voornaam\":\"Harry\",\"type_title\":\"Geregistreerde\",\"filter_rol\":\"Geregistreerde\",\"datum_geboorte\":\"1956-00-00\",\"register_naam\":\"Archiefkaarten\"},\"location_name\":null,\"entity_type\":\"ams_person\",\"location\":null,\"id\":\"9853340f-d52e-56a3-e053-b784100ade19\",\"deed_id\":\"9853340f-d52d-56a3-e053-b784100ade19\",\"title\":\"\",\"register_id\":\"08ebb210-5812-b104-bbb6-24b8326b3ea3\",\"timestamp\":\"2021-11-07T16:56:19.552Z\"},{\"geo\":null,\"entity_uuid\":\"e0d8fc91-3e07-313a-e5d1-b35da2ea4f5d\",\"metadata\":{\"datum\":\"1933-00-00\",\"deed_type_title\":\"Registratie\",\"register_gemeente\":\"Amsterdam\",\"has_assets\":\"register\",\"person_display_name\":\"Harry Johan Potter\",\"plaats\":\"Amsterdam\",\"ordering\":0,\"geslachtsnaam\":\"Potter\",\"register_type_title\":\"Archiefkaarten\",\"achternaam\":\"Potter\",\"modified_time\":\"2020-08-15T10:51:18.555689\",\"voornaam\":\"Harry Johan\",\"type_title\":\"Geregistreerde\",\"filter_rol\":\"Geregistreerde\",\"datum_geboorte\":\"1933-00-00\",\"register_naam\":\"Archiefkaarten\"},\"location_name\":null,\"entity_type\":\"ams_person\",\"location\":null,\"id\":\"98533417-bc90-56a3-e053-b784100ade19\",\"deed_id\":\"98533417-bc8f-56a3-e053-b784100ade19\",\"title\":\"\",\"register_id\":\"08ebb210-5812-b104-bbb6-24b8326b3ea3\",\"timestamp\":\"2021-11-07T07:09:54.402Z\"}],\"links\":{\"person.detail\":\"https://webservices.picturae.pro/genealogy/person/{person.id}\"}}" }
Ok so here is the pipeline,
[ js ] fetch(POST) => own backend REST service(java),
[ java ] then does a backend fetch => external API(no control),
[ java ] then returns this into the original fetch(POST) ,
[ js ] original fetch(POST) => console.log()
Somewhere along the line all kinds of backslashes have been added, I have removed many by buffered reading it etc. I think I am quite close now, but I just cannot seem to crack it.
- [ js ] fetch(POST) => own backend REST service(java),
const fetchOptions = {
method: 'POST',
body: JSON.stringify(jsonRequestBody),
headers: {
Authorization: `Bearer ${window.sessionStorage.getItem('JWT')}`,
Accept: 'application/json',
'Content-Type': 'application/json',
},
};
const feedbackSpan = document.getElementById('feedbackSpan');
fetch(`${localhost}restservices/search-advanced-service/`, fetchOptions)
.then(async (response) => {
if (response.status === 200) {
// er is een account gevonden !
const myJson = await response.json(); // return the search results incl changelog
console.log(myJson);
const myJsonString = JSON.stringify(myJson, null, 2);
console.log(myJsonString.replace('\\',''));
console.log(JSON.parse(myJson));
console.log(JSON.stringify(myJsonString));
}
if (response.status === 403) {
feedbackSpan.innerHTML = '<p>Check of je bent ingelogd!</p>';
}
})
.catch((err) => {
console.log('Error: ', err);
});
}
- [ java ] then does a backend fetch => external API(no control),
public JSONObject fetchSearchResultAsJson(String theURL) throws IOException {
URL url = new URL(theURL);
InputStream is = url.openStream();
int cursor = 0;
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is));
JSONTokener tokener = new JSONTokener(bufferedReader);
JSONObject json = new JSONObject(tokener);
is.close();
bufferedReader.close();
return json;
}
}
- [ java ] then returns this into the original fetch(POST) ,
@POST
@RolesAllowed("user")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("")
public Response advancedSearchProcess(SearchAdvancedInput searchQuery, @Context SecurityContext sc) {
System.out.println("advancedSearchProcess");
try {
for (String zoekUri : zoekopdracht.getZoekUris()) {
JSONObject resultaat = fetchSearchResultAsJson(zoekUri);
messages.put("zoekopdracht",
resultaat.toString()
);
}
return Response.ok().entity(messages).build();
} catch (Exception exception) {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(exception).build();
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论