在JAVA中进行关键检查JSONObject org.json.simple

时间:2019-11-17 10:03:08

标签: java json jsonparser json-simple

使用jsonobject将密钥转换为org.json.simple。我尝试了多种方法来做,但是都失败了

第一种方法

JSONObject name1 = (JSONObject) jsonObject.get(key);
  

错误:无法将java.lang.string转换为org.json.simple.json.object

第二种方式

JSONParser parser = new JSONParser();
JSONObject name1 = (JSONObject) parser.parse(key);
  

错误:位置0处出现意外字符(N)。       在org.json.simple.parser.Yylex.yylex(未知来源)       在org.json.simple.parser.JSONParser.nextToken(未知来源)       在org.json.simple.parser.JSONParser.parse(未知来源)       在org.json.simple.parser.JSONParser.parse(未知来源)       在org.json.simple.parser.JSONParser.parse(未知来源)

第三种方式

Long name1 = Long.valueOf(jsonObject.get(key));
  

错误:Long类型的valueValue(String)方法不适用于参数(对象)

第四种方式

我使用了此功能:

optJSONObject(key)
  

错误:未为JSONObject定义optJSONObject

如何使它正常工作?

2 个答案:

答案 0 :(得分:0)

因此JSONObject.get(key)函数通常不返回json对象本身。但是org.json数据包并没有解决这个问题。 由于org.json包含2个JSONObject包,org.json.simple和普通的org.json.JSONObject,因此请仔细阅读,因此我不知道这是否在org.json.simple中明确起作用,但这是我的工作使用org.json包处理JSONObject时。

JSONObject name1 = jsonObject.getJSONObject(key);

此行可以完成您要在其中执行的操作。试试吧。

JSON包带来了诸如getInt,getString,getJSONObject之类的函数,供您确切指定要获取的数据类型。

答案 1 :(得分:0)

此行

  

错误:位置0处出现意外字符(N)。

第二种方式代码片段/引用要解析无效JSON的状态。 此行中的JSONObject name1 = (JSONObject) parser.parse(key); key可能包含无效的JSON。这就是解析器引发异常的原因。

您可以尝试调试代码,查看key字符串的样子,然后应该找出哪个字符串(如果不是全部)包含无效的JSON。

我创建了一个简约程序,该程序从文件(您在@ Sepx3的答案下提到)中解析有效的JSONArray(如果文件仅包含一个JSON对象,则解析为JSONObject。我试图将您的代码片段中的名称用于相关代码,以便保持清晰。

我的C:/Users/Envy/Documents/company.json示例文件的内容:

[
  {
    "key": "value"
  },
  {
    "key1": "value1"
  },
  [
    {
      "key2": "value2"
    },
    {
      "key3": "value3"
    }
  ]
]

和解析它的代码将其存储到对象中,然后检查是否已解析JSONArray或单个JSONObject(在我的示例中为JSONArray)。

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;

import java.io.FileReader;

public class DemoApplication {

    public static void main(String[] args) {
        JSONParser parser = new JSONParser();

        Object obj = null;
        try {

            obj = parser.parse(new FileReader("C:/Users/Envy/Documents/company.json"));

        } catch (Exception e) {
            // Handle possible exceptions
            e.printStackTrace();
        }

        // If the parsed string was a single json object
        if (obj instanceof JSONObject) {
            JSONObject jsonObject = (JSONObject) obj;

            // Do something with jsonObject, in this example it prints the content of jsonObject
            System.out.println(jsonObject);

        }
        // Or else if the parsed string was a json array
        else if (obj instanceof JSONArray) {
            JSONArray jsonArray = (JSONArray) obj;

            // Do something with jsonArray, in this example it prints the content of jsonArray
            System.out.println(jsonArray);
        }
    }
}

我希望这至少对您有所帮助,并使您走上正确的轨道。