json java =&gt中的逃生角色; JavaScript

发布于 2025-02-12 10:43:54 字数 5234 浏览 0 评论 0原文

问题是无效的JSON结构,并增加了逃生后斜线。

在我(JS)前端读取JSON的错误时,我从Jax-Rs Java球衣后端获取了错误。

  1. 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}\"}}" }

确定,这是管道,

  1. [js] fetch(post)=>拥有后端休息服务(Java),

  2. [Java]然后进行后端fetch =>外部API(无控制),

  3. [java]然后将其返回原始fetch(post),

  4. [js]原始fetch(post)=> console.log()

沿线某个地方添加了各种后斜切,我已经通过阅读它来删除了许多。

  1. [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);
    });
}
  1. [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;
    }
}
  1. [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.

  1. 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,

  1. [ js ] fetch(POST) => own backend REST service(java),

  2. [ java ] then does a backend fetch => external API(no control),

  3. [ java ] then returns this into the original fetch(POST) ,

  4. [ 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.

  1. [ 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);
    });
}
  1. [ 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;
    }
}
  1. [ 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文