Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 解析复杂的JSON结构_Java_Json - Fatal编程技术网

Java 解析复杂的JSON结构

Java 解析复杂的JSON结构,java,json,Java,Json,我试图用Java解析这个JSON { "json": { "abc": 0, "def": "100", "ghi": 1, "jkl": "0000000000", "mno": "3", "pqr": "COLS, COMPLETE", "stu": 2, "vwx": "0000010000", "yz": "00", "a123": 31, "b123": 1, "c123": "1270

我试图用Java解析这个JSON

{
  "json": {
    "abc": 0,
    "def": "100",
    "ghi": 1,
    "jkl": "0000000000",
    "mno": "3",
    "pqr": "COLS, COMPLETE",
    "stu": 2,
    "vwx": "0000010000",
    "yz": "00",
    "a123": 31,
    "b123": 1,
    "c123": "1270",
    "d123": "2",
    "e123": "00",
    "f123": 1,
    "g123": "0000001000"
  },
  "_indexes": {
    "c123": [
      "1270"
    ],
    "h123": [
      "1270"
    ]
  },
  "_d": false,
  "_dd": "2017-09-12T12:03:53.716Z",
  "_op": "add",
  "_id": 2
}
到目前为止,我已经使用gson库完成了以下工作:-

         JsonParser par = new JsonParser();
         JsonElement jsonelement = par.parse(new FileReader("ddJob.json"));
         JsonArray jsonArr = jsonelement.getAsJsonArray();
             for(Object o : jsonArr)
             {
                 JsonObject obj = (JsonObject)(o);
                 JsonObject mArry = obj.getAsJsonObject();
                 String keyVal = mArry.get("key").toString();

                 if(keyVal.equalsIgnoreCase("\"jsonstore.LinkTree\""))
                 {
                    if(mArry.isJsonArray())
                 {
                     System.out.println("It is a JSONArray");
                 }
                 else if(mArry.isJsonObject())
                 {
                     System.out.println("It is a JSONObject");                       
                 }
                 else if(mArry.isJsonPrimitive())
                 {
                     System.out.println("It is a JSONPrimitive");
                 }
                 else if(mArry.isJsonNull())
                 {
                     System.out.println("It is a JSONNull");
                 }
                 }
                // Here it prints ,it is a JSONObject

我需要这里的帮助,我无法解析这个JSONObject,我无法从中获取JSonArray,也无法获取任何类似于原语等的内容。我可以在调试器中看到它包含了我需要的所有信息。因为中间有空格,所以无法阅读

你能告诉我如何解析这个JSON的其余部分吗

非常感谢。

我用过。罐子可以找到。 此更新版本应有助于处理多个用逗号分隔的
JSON
对象。此版本尝试找到正确的逗号,然后根据这些逗号拆分字符串。

import java.io.StringReader;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.json.Json;
import javax.json.stream.JsonParser;
import javax.json.stream.JsonParser.Event;
import static javax.json.stream.JsonParser.Event.KEY_NAME;
import static javax.json.stream.JsonParser.Event.VALUE_FALSE;
import static javax.json.stream.JsonParser.Event.VALUE_NUMBER;
import static javax.json.stream.JsonParser.Event.VALUE_STRING;
import static javax.json.stream.JsonParser.Event.VALUE_TRUE;

/**
 *
 * @author blj0011
 */
public class JSONParserTest {


    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        String jsonString = "{\n" +
                            "  \"json\": {\n" +
                            "    \"abc\": 0,\n" +
                            "    \"def\": \"100\",\n" +
                            "    \"ghi\": 1,\n" +
                            "    \"jkl\": \"0000000000\",\n" +
                            "    \"mno\": \"3\",\n" +
                            "    \"pqr\": \"COLS, COMPLETE\",\n" +
                            "    \"stu\": 2,\n" +
                            "    \"vwx\": \"0000010000\",\n" +
                            "    \"yz\": \"00\",\n" +
                            "    \"a123\": 31,\n" +
                            "    \"b123\": 1,\n" +
                            "    \"c123\": \"1270\",\n" +
                            "    \"d123\": \"2\",\n" +
                            "    \"e123\": \"00\",\n" +
                            "    \"f123\": 1,\n" +
                            "    \"g123\": \"0000001000\"\n" +
                            "  },\n" +
                            "  \"_indexes\": {\n" +
                            "    \"c123\": [\n" +
                            "      \"1270\"\n" +
                            "    ],\n" +
                            "    \"h123\": [\n" +
                            "      \"1270\"\n" +
                            "    ]\n" +
                            "  },\n" +
                            "  \"_d\": false,\n" +
                            "  \"_dd\": \"2017-09-12T12:03:53.716Z\",\n" +
                            "  \"_op\": \"add\",\n" +
                            "  \"_id\": 2\n" +
                            "},\n" +
                            "{\n" +
                            "  \"json\": {\n" +
                            "    \"abc\": 0,\n" +
                            "    \"def\": \"100\",\n" +
                            "    \"ghi\": 1,\n" +
                            "    \"jkl\": \"0000000000\",\n" +
                            "    \"mno\": \"3\",\n" +
                            "    \"pqr\": \"COLS, COMPLETE\",\n" +
                            "    \"stu\": 2,\n" +
                            "    \"vwx\": \"0000010000\",\n" +
                            "    \"yz\": \"00\",\n" +
                            "    \"a123\": 31,\n" +
                            "    \"b123\": 1,\n" +
                            "    \"c123\": \"1270\",\n" +
                            "    \"d123\": \"2\",\n" +
                            "    \"e123\": \"00\",\n" +
                            "    \"f123\": 1,\n" +
                            "    \"g123\": \"0000001000\"\n" +
                            "  },\n" +
                            "  \"_indexes\": {\n" +
                            "    \"c123\": [\n" +
                            "      \"1270\"\n" +
                            "    ],\n" +
                            "    \"h123\": [\n" +
                            "      \"1270\"\n" +
                            "    ]\n" +
                            "  },\n" +
                            "  \"_d\": false,\n" +
                            "  \"_dd\": \"2017-09-12T12:03:53.716Z\",\n" +
                            "  \"_op\": \"add\",\n" +
                            "  \"_id\": 2\n" +
                            "},\n" +
                            "{\n" +
                            "  \"json\": {\n" +
                            "    \"abc\": 0,\n" +
                            "    \"def\": \"100\",\n" +
                            "    \"ghi\": 1,\n" +
                            "    \"jkl\": \"0000000000\",\n" +
                            "    \"mno\": \"3\",\n" +
                            "    \"pqr\": \"COLS, COMPLETE\",\n" +
                            "    \"stu\": 2,\n" +
                            "    \"vwx\": \"0000010000\",\n" +
                            "    \"yz\": \"00\",\n" +
                            "    \"a123\": 31,\n" +
                            "    \"b123\": 1,\n" +
                            "    \"c123\": \"1270\",\n" +
                            "    \"d123\": \"2\",\n" +
                            "    \"e123\": \"00\",\n" +
                            "    \"f123\": 1,\n" +
                            "    \"g123\": \"0000001000\"\n" +
                            "  },\n" +
                            "  \"_indexes\": {\n" +
                            "    \"c123\": [\n" +
                            "      \"1270\"\n" +
                            "    ],\n" +
                            "    \"h123\": [\n" +
                            "      \"1270\"\n" +
                            "    ]\n" +
                            "  },\n" +
                            "  \"_d\": false,\n" +
                            "  \"_dd\": \"2017-09-12T12:03:53.716Z\",\n" +
                            "  \"_op\": \"add\",\n" +
                            "  \"_id\": 2\n" +
                            "}"; //I am guessing this is how your data looks.


        List<Integer> positions = new ArrayList();
        Pattern p = Pattern.compile("\\},\n\\{");//Find this pattern ***MAKE SURE THIS PATTERN IS CORRECT FOR YOU*** Your patter may be "\\},\\{"
        Matcher m = p.matcher(jsonString);
        while(m.find())
        {
            positions.add(m.start() + 1);//save starting position of the found pattern
        }

        System.out.println("# of positions: " + positions.size());
        List<String> jsonStringObjects = new ArrayList();

        if(positions.size() >= 1)
        {
            jsonStringObjects.add(jsonString.substring(0, positions.get(0)));//get first jsonString
            //System.out.println(jsonString.substring(0, positions.get(0)));   
            jsonStringObjects.add(jsonString.substring(positions.get(positions.size() - 1) + 1));//get last jsonString
            //System.out.println(jsonString.substring(positions.get(positions.size() - 1) + 1));   
        }
        if(positions.size() >= 2  )
        for(int i = 0; i < positions.size() - 1; i++)//get all jsonStrings between first and last
        {              
            jsonStringObjects.add(jsonString.substring(positions.get(i) + 1, positions.get(i + 1)));
            //System.out.println(jsonString.substring(positions.get(i) + 1, positions.get(i + 1)));           
        }                

        System.out.println("# of jsonStringObjects: " + jsonStringObjects.size());
        int counter = 0;
        for(String item : jsonStringObjects)
        {
            System.out.println("JSON Object #: " + ++counter);
            try (JsonParser parser = Json.createParser(new StringReader(item))) {
                while (parser.hasNext()) {
                    final Event event = parser.next();
                    switch (event) {
                        case KEY_NAME:
                            String key = parser.getString();
                            System.out.println("\t" + key);
                            break;
                        case VALUE_STRING:
                            String value = parser.getString();
                            System.out.println("\t" + value);
                            break;
                        case VALUE_NUMBER:
                            BigDecimal number = parser.getBigDecimal();
                            System.out.println("\t" + number);
                            break;
                        case VALUE_TRUE:
                            System.out.println("\t" + true);
                            break;
                        case VALUE_FALSE:
                            System.out.println("\t" + false);
                            break;
                    }
                }
            }
        }
    }

}

根元素不是数组。您是否尝试过使用
getAsJsonObject
(或其他名称)来代替它?先生,谢谢您的帮助。我注意到您已经删除了最后一个“_索引”部分。那很好。当我进行第一次调用并将其视为JsonObject并使用上面提到的调用时。我得到这个错误:-java.lang.IllegalStateException:不是JSON对象:[{“key”:“WL_WEBLOG_CONFIG”,“value”:“{\u0000\”\u0000e\u0000n \几分钟后将向您更新。cricket_007--谢谢您,我没有意识到它可能是UTF-16。谢谢。@Sedrick Jefferson-先生,这很好,但是您能告诉我如何使用这个JsonParser读取整个JSON文件吗。问题是,当读取整个记录时(如上所述)这是一条记录,然后是一个逗号,它启动一条新记录,如,{“json”:…,此时,代码抛出一个异常“Invalid token=comma………”。我检查了它建议的行号和列号,它确实是逗号分隔符。我会研究这个问题,但如果你知道这一点,请你建议我如何解决这个问题。非常感谢。我猜逗号会导致JSON无效。我要做的是将整个文件读取为
字符串
。接下来,我将在逗号上拆分
字符串。最后,我将分别处理
字符串的
数组列表
/
数组
。建议不起作用。在
JSON
中有很多逗号,您只想在特定的一个上拆分。谢谢。我将尝试在“,{”上拆分看看这是否有效。它真的帮了我。谢谢。
run:
# of positions: 2
# of jsonStringObjects: 3
JSON Object #: 1
    json
    abc
    0
    def
    100
    ghi
    1
    jkl
    0000000000
    mno
    3
    pqr
    COLS, COMPLETE
    stu
    2
    vwx
    0000010000
    yz
    00
    a123
    31
    b123
    1
    c123
    1270
    d123
    2
    e123
    00
    f123
    1
    g123
    0000001000
    _indexes
    c123
    1270
    h123
    1270
    _d
    false
    _dd
    2017-09-12T12:03:53.716Z
    _op
    add
    _id
    2
JSON Object #: 2
    json
    abc
    0
    def
    100
    ghi
    1
    jkl
    0000000000
    mno
    3
    pqr
    COLS, COMPLETE
    stu
    2
    vwx
    0000010000
    yz
    00
    a123
    31
    b123
    1
    c123
    1270
    d123
    2
    e123
    00
    f123
    1
    g123
    0000001000
    _indexes
    c123
    1270
    h123
    1270
    _d
    false
    _dd
    2017-09-12T12:03:53.716Z
    _op
    add
    _id
    2
JSON Object #: 3
    json
    abc
    0
    def
    100
    ghi
    1
    jkl
    0000000000
    mno
    3
    pqr
    COLS, COMPLETE
    stu
    2
    vwx
    0000010000
    yz
    00
    a123
    31
    b123
    1
    c123
    1270
    d123
    2
    e123
    00
    f123
    1
    g123
    0000001000
    _indexes
    c123
    1270
    h123
    1270
    _d
    false
    _dd
    2017-09-12T12:03:53.716Z
    _op
    add
    _id
    2