> But I'm afraid that, IIUC, `includeProperty()` works "reactively" against the > actual incoming JSON stream. Then, it works for matching properties, but > it could not work for non-match. (In the example, `includeProperty()` might > never be called against "foo" while reading {"xxx":{"yyy":"zzz"}}.)
Ah..., wait, if : 1) `TokenFilter` (extended `JsonPointerBasedFilter`) can be stateful, and 2) `TokenFilter` (extended `JsonPointerBasedFilter`) can detect the end of the object or the array ("}" or "]"), it may probably be feasible by : 1') changing the state when `includeProperty` receives "foo", and 2') raising an Exception when the state is not changed at "}" Let me think a little bit more. I hope (1) is okay. (2) may be feasible by implementing `filterFinishObject`? 2023年9月20日(水) 14:30 Dai MIKURUBE <dmikur...@acm.org>: > Thanks, Tatu! > > > I haven't done this, but looking at `JsonPointerBasedFilter` I would > > probably try overriding `includeProperty()` method to catch the case > > of non-match. Note that you'd also need to override `includeElement`, > > and for both make sure to construct an instance of your own sub-class. > > I think that should allow you to do what you want. > > I'll also file an issue for minor improvement for > > `JsonPointerBasedFilter` to make sub-classing bit safer. > > But I'm afraid that, IIUC, `includeProperty()` works "reactively" against > the > actual incoming JSON stream. Then, it works for matching properties, but > it could not work for non-match. (In the example, `includeProperty()` might > never be called against "foo" while reading {"xxx":{"yyy":"zzz"}}.) > > `TokenFilter` has many other callback methods. I wondered if some of them > could be used, but not dived deeper yet. Or, otherwise, I thought that I > might > have to hack `FilteringParserDelegate` reimplemented. > > > 2023年9月20日(水) 14:09 Tatu Saloranta <t...@fasterxml.com>: > >> On Tue, Sep 19, 2023 at 10:31 AM Dai MIKURUBE <dmikur...@acm.org> wrote: >> > >> > Hi, >> > >> > I have a sequence of multiple JSONs in a stream, and wanted to filter >> the sequence by FilteringParserDelegate / JsonPointerBasedFilter. >> > >> > It works in normal matching cases. But, I wanted to raise an error when >> a matching property does not exist. >> >> Sounds reasonable. >> >> > >> > For example, in the following case : >> > >> > JsonParser parser = new FilteringParserDelegate( >> > >> >> factory.createParser("{\"foo\":{\"bar\":\"baz\"}}{\"xxx\":{\"yyy\":\"zzz\"}}{\"foo\":{\"bar\":\"qux\"}}"), >> > new JsonPointerBasedFilter("/foo"), >> > TokenFilter.Inclusion.ONLY_INCLUDE_ALL, >> > true >> > ); >> > >> > This |parser| returns {"bar":"baz"}, and {"bar":"qux"}, with just >> skipping {"xxx":{"yyy":"zzz"}}. >> > >> > Here, I wanted to raise an error (Exception) while reading >> {"xxx":{"yyy":"zzz"}}. >> > >> > >> > Does anyone know how to realize it? I'm ready to write my own >> TokenFilter, or to expand JsonPointerBasedFilter by myself. >> >> I haven't done this, but looking at `JsonPointerBasedFilter` I would >> probably try overriding `includeProperty()` method to catch the case >> of non-match. Note that you'd also need to override `includeElement`, >> and for both make sure to construct an instance of your own sub-class. >> I think that should allow you to do what you want. >> I'll also file an issue for minor improvement for >> `JsonPointerBasedFilter` to make sub-classing bit safer. >> >> -+ Tatu +- >> >> >> > >> > >> > Thanks. >> > >> > -- >> > You received this message because you are subscribed to the Google >> Groups "jackson-user" group. >> > To unsubscribe from this group and stop receiving emails from it, send >> an email to jackson-user+unsubscr...@googlegroups.com. >> > To view this discussion on the web visit >> https://groups.google.com/d/msgid/jackson-user/6acc6b25-7292-4b31-a08f-8f541a075158n%40googlegroups.com >> . >> >> -- >> You received this message because you are subscribed to a topic in the >> Google Groups "jackson-user" group. >> To unsubscribe from this topic, visit >> https://groups.google.com/d/topic/jackson-user/bLZTjjjXZ28/unsubscribe. >> To unsubscribe from this group and all its topics, send an email to >> jackson-user+unsubscr...@googlegroups.com. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/jackson-user/CAL4a10jR5MgpgF8YBzG%2BRZMZFv9%2Br_WCqgCadNERRTaNH7QiDw%40mail.gmail.com >> . >> > > > -- > Dai MIKURUBE > dmikur...@acm.org > -- Dai MIKURUBE dmikur...@acm.org -- You received this message because you are subscribed to the Google Groups "jackson-user" group. To unsubscribe from this group and stop receiving emails from it, send an email to jackson-user+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/jackson-user/CAJ3Zeoh7ixM%3DdnkFnT%2B91HgZZu-xgKkACyWskSLeANqAtR4PHQ%40mail.gmail.com.