解析Java中的json字符串:位置1

时间:2019-06-05 08:29:10

标签: java json

我正在尝试解析表示如下的json字符串: json viewer

{PurchAdBidderBidRequest:{div:"lmhovttghyiifbwnzktyzmqic"}}

当前我正在使用导致给定异常Unexpected character (P) at position 1. 的代码,请提出解决方法,因为我已经用Google搜索了此错误,但我的json与我在此处发现的与此相关的其他问题没有什么不同

System.out.println(jstring);
            JSONParser parser = new JSONParser();
            JSONObject js = null;
            try {
                js = (JSONObject) parser.parse(jstring);
            } catch (ParseException e) {
                e.printStackTrace();
            }
            System.out.println("Before : "+ (new JSONObject(js)));

3 个答案:

答案 0 :(得分:0)

JSON格式的键必须用引号引起来。

尝试一下:

{“ PurchAdBidderBidRequest”:{“ div”:“ lmhovttghyiifbwnzktyzmqic”}}

答案 1 :(得分:0)

看到这是一种有效的Javascript语法并且可以对其进行评估,这使我有了使用Nashorn Javascript Engine的想法,该{@ 3}是在Java中实现的,默认情况下在jdk发行版中可用。

因此,您可以修改图像中的那个字符串,我认为它是字符串而不是对象,即您可以将值设为"{PurchAdBidderBidRequest:{div:\"lmhovttghyiifbwnzktyzmqic\"}}"而不是{PurchAdBidderBidRequest:{div:"lmhovttghyiifbwnzktyzmqic"}}

一个小例子:

import javax.script.ScriptEngine;
import jdk.nashorn.api.scripting.NashornScriptEngineFactory;
import jdk.nashorn.api.scripting.JSObject;

class BadJson {
    public static void main(String[] args) throws Exception {
        NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
        ScriptEngine engine = factory.getScriptEngine();

        String v = "v = {PurchAdBidderBidRequest:{div:\"lmhovttghyiifbwnzktyzmqic\"}}";

        JSObject res = (JSObject)(engine.eval(v));
        System.out.println(((JSObject)(res.getMember("PurchAdBidderBidRequest"))).getMember("div"));
    }
}

我认为您现在可以利用它来解析任何内容。

答案 2 :(得分:0)

当您遇到字母时,在它前面没有双引号。

然后添加双引号

当您找到“:”或“}”并且在其前面没有双引号时

然后添加双引号