JSONPathTypedMultiNamesPrefixIndex1.java

package com.alibaba.fastjson2;

import java.lang.reflect.Type;
import java.time.ZoneId;

public class JSONPathTypedMultiNamesPrefixIndex1
        extends JSONPathTypedMultiNames {
    final int index;

    JSONPathTypedMultiNamesPrefixIndex1(
            JSONPath[] paths,
            JSONPathSingleIndex prefix,
            JSONPath[] namePaths,
            Type[] types,
            String[] formats,
            long[] pathFeatures,
            ZoneId zoneId,
            long features) {
        super(paths, prefix, namePaths, types, formats, pathFeatures, zoneId, features);
        index = prefix.index;
    }

    @Override
    public Object extract(JSONReader jsonReader) {
        if (jsonReader.nextIfNull()) {
            return new Object[paths.length];
        }

        if (!jsonReader.nextIfArrayStart()) {
            throw new JSONException(jsonReader.info("illegal input, expect '[', but " + jsonReader.current()));
        }

        for (int i = 0; i < index; ++i) {
            if (jsonReader.nextIfArrayEnd()) {
                return new Object[paths.length];
            }

            if (jsonReader.isEnd()) {
                throw new JSONException(jsonReader.info("illegal input, expect '[', but " + jsonReader.current()));
            }

            jsonReader.skipValue();
        }

        if (jsonReader.nextIfNull()) {
            return new Object[paths.length];
        }

        if (jsonReader.nextIfArrayEnd()) {
            return new Object[paths.length];
        }

        return objectReader.readObject(jsonReader);
    }
}