You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@uima.apache.org by Syed Moinuddin <mo...@gmail.com> on 2016/11/28 06:48:04 UTC

Getting output in json

HI,

I want to get the output in json, I'm trying the following program,

public static void main(final String... args) throws IOException,
UIMAException, SAXException {
        final String note = "Serum Cholesterol 154 150 250
mgs/dl\n-\nSerum Triglycerides 67 90 200 mgs /dl\n-\nSerum HDL:
Cholesterol 38 35 55 mgs /dl\n-\nSerum LDL: Cholesterol 49 85 150
mgs/d1\n-\nSerum VLDL: Cholesterol 13 10 40 mgs/dl\n-\nTotal
Cholesterol / HDL Ratio: 3.90\";
        final JCas jcas = JCasFactory.createJCas();
        jcas.setDocumentText(note);
//        final AnalysisEngineDescription aed = getDefaultPipeline();
        final AnalysisEngineDescription aed = getFastPipeline();  //
Outputs from default and fast pipeline are identical
        SimplePipeline.runPipeline(jcas, aed);

        Collection<TOP> codes = JCasUtil.selectAll(jcas);
        List<TOP> list = new ArrayList<>(codes)

        TOP [] res = list.toArray(new TOP[list.size()]);

//        System.out.println(Arrays.toString(res));

        String json = new Gson().toJson(res);
        System.out.println(json);

    }

But this gives following error,

Exception in thread "main" java.lang.IllegalArgumentException: class
org.apache.uima.jcas.tcas.DocumentAnnotation_Type declares multiple
JSON fields named fsGenerator
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:122)
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:72)
	at com.google.gson.Gson.getAdapter(Gson.java:353)
	at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:55)
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89)
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:195)
	at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
	at com.google.gson.internal.bind.ArrayTypeAdapter.write(ArrayTypeAdapter.java:93)
	at com.google.gson.Gson.toJson(Gson.java:586)
	at com.google.gson.Gson.toJson(Gson.java:565)
	at com.google.gson.Gson.toJson(Gson.java:520)
	at com.google.gson.Gson.toJson(Gson.java:500)
	at org.apache.ctakes.clinicalpipeline.ExtractNEs.main(ExtractNEs.java:146)

Any guidance would be really helpful.

Thanks

Re: Getting output in json

Posted by Marshall Schor <ms...@schor.com>.
I'm not very familiar with Gson, so I can't help there.

However, UIMA has built-in JSON serialization, described here:

http://uima.apache.org/d/uimaj-current/references.html#ugr.ref.json

This is built on the Jackson support for JSON.

-Marshall

On 11/28/2016 1:48 AM, Syed Moinuddin wrote:
> HI,
>
> I want to get the output in json, I'm trying the following program,
>
> public static void main(final String... args) throws IOException,
> UIMAException, SAXException {
>         final String note = "Serum Cholesterol 154 150 250
> mgs/dl\n-\nSerum Triglycerides 67 90 200 mgs /dl\n-\nSerum HDL:
> Cholesterol 38 35 55 mgs /dl\n-\nSerum LDL: Cholesterol 49 85 150
> mgs/d1\n-\nSerum VLDL: Cholesterol 13 10 40 mgs/dl\n-\nTotal
> Cholesterol / HDL Ratio: 3.90\";
>         final JCas jcas = JCasFactory.createJCas();
>         jcas.setDocumentText(note);
> //        final AnalysisEngineDescription aed = getDefaultPipeline();
>         final AnalysisEngineDescription aed = getFastPipeline();  //
> Outputs from default and fast pipeline are identical
>         SimplePipeline.runPipeline(jcas, aed);
>
>         Collection<TOP> codes = JCasUtil.selectAll(jcas);
>         List<TOP> list = new ArrayList<>(codes)
>
>         TOP [] res = list.toArray(new TOP[list.size()]);
>
> //        System.out.println(Arrays.toString(res));
>
>         String json = new Gson().toJson(res);
>         System.out.println(json);
>
>     }
>
> But this gives following error,
>
> Exception in thread "main" java.lang.IllegalArgumentException: class
> org.apache.uima.jcas.tcas.DocumentAnnotation_Type declares multiple
> JSON fields named fsGenerator
> 	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:122)
> 	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:72)
> 	at com.google.gson.Gson.getAdapter(Gson.java:353)
> 	at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:55)
> 	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89)
> 	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:195)
> 	at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
> 	at com.google.gson.internal.bind.ArrayTypeAdapter.write(ArrayTypeAdapter.java:93)
> 	at com.google.gson.Gson.toJson(Gson.java:586)
> 	at com.google.gson.Gson.toJson(Gson.java:565)
> 	at com.google.gson.Gson.toJson(Gson.java:520)
> 	at com.google.gson.Gson.toJson(Gson.java:500)
> 	at org.apache.ctakes.clinicalpipeline.ExtractNEs.main(ExtractNEs.java:146)
>
> Any guidance would be really helpful.
>
> Thanks
>