当前位置: 首页 > 面试题库 >

JSONObject包含转义字符

仇睿
2023-03-14
问题内容

我正在构建一个模拟器,以将JSON数据发布到正在运行的服务中。

JSON应该如下所示:

{"sensor":
       {"id":"SENSOR1","name":"SENSOR","type":"Temperature","value":100.12,"lastDateValue":"\/Date(1382459367723)\/"}
}

我在Chrome中使用“高级REST客户端”进行了尝试,效果很好。ServiceStack Web服务会正确解析日期获取。

因此,关键是编写一个传感器模拟器,将这样的数据发布到Web服务。

我用Java创建了它,因此可以在树莓派上运行它。

这是代码:

    public static void main(String[] args) {

    String url = "http://localhost:63003/api/sensors";
    String sensorname = "Simulated sensor";
    int currentTemp = 10;
    String dateString = "\\" + "/Date(" + System.currentTimeMillis() + ")\\" + "/";
    System.out.println(dateString);

    System.out.println("I'm going to post some data to: " + url);

    //Creating the JSON Object
    JSONObject data = new JSONObject();
    data.put("id", sensorname);
    data.put("name", sensorname);
    data.put("type", "Temperature");
    data.put("value", currentTemp);
    data.put("lastDateValue", dateString);
    JSONObject sensor = new JSONObject().put("sensor",  data);

    //Print out the data to be sent
    StringWriter out = new StringWriter();
    sensor.write(out);

    String jsonText = out.toString();
    System.out.print(jsonText);

    //Sending the object
    HttpClient c = new DefaultHttpClient();
    HttpPost p = new HttpPost(url);
    p.setEntity(new StringEntity(sensor.toString(), ContentType.create("application/json")));

    try {
        HttpResponse r = c.execute(p);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

该程序的输出如下:

\/Date(1382459367723)\/
I'm going to post some data to: http://localhost:63003/api/sensors
{"sensor":{"lastDateValue":"\\/Date(1382459367723)\\/","id":"Simulated sensor","name":"Simulated sensor","value":10,"type":"Temperature"}}

这里的问题是JSONObject字符串仍然包含这些转义字符。但是,当我在开头打印字符串时,它不包含转义字符。有什么办法摆脱这些?我的服务无法解析这些。

这是我与chrome的其余客户端一起发送的示例:

 {"sensor":{"id":"I too, am a sensor!","name":"Willy","type":"Temperature","value":100.12,"lastDateValue":"\/Date(1382459367723)\/"}}

问题答案:

JSONObject正确编码了字符串。本页描述如何在JavaScript(以及扩展名JSON)中转义字符串文字。以下说明对于理解示例中的内容很重要:

对于表2.1中未列出的字符,将忽略前面的反斜杠,但不建议使用此用法,应避免使用。

您的示例("\/Date(1382459367723)\/")在之前使用反斜杠/。由于/不在表2.1中,因此\应将其忽略。如果您的服务没有忽略\,那么它要么有错误,要么不是JSON解析器(也许它使用的数据格式与JSON相似,但不完全相同)。

由于您需要生成不符合标准的JSON,因此您将无法使用标准工具来这样做。您的两个选择是编写自己的非相当JSON编码器,或者避免必须转义的字符,例如\"



 类似资料:
  • 在XSLT 1.0中,处理此xml元素的最佳方法是什么 请注意,“小于号”表示两次。i、 e.as<代码>' 退出<代码> 如果我将禁用输出转义设置为“是”,则

  • 我有一个字符串返回给我,其中包含转义字符。 这是一个示例字符串 " test\40gmail.com " 如您所见,它包含转义字符。我需要将其转换为其实际值,即 " test@gmail.com " 我该怎么做?

  • 问题内容: 我尝试使用以下方法安装node.js模块: 但我得到这个错误: 可能正在发生这种情况,因为我使用代理服务器,但我通过这种方式设置了代理服务器,以允许从网络外部的ips下载 我希望你能帮帮我 问题答案: 从命令行设置代理。 如果仍然发生错误,请再试一次。 这些为我工作。(请参阅http://sushichop.blogspot.jp/2013/01/npm- install.html )

  • 在JSON中,Unicode字符可以使用表示法进行转义。我假设显然是指十六进制的Unicode代码点。 但由于只有4位数字,这是否意味着无法转义

  • 大家好,提前致谢! 我正在处理一个处理utf-8字符串并替换特定字符的Python脚本。因此,我使用,同时通过一个定义unicode字符及其所需替换的列表进行循环,如下所示。 到目前为止,一切都很好。但现在考虑一个包含要替换的字符的csv文件,如下所示。 由于转义字符的原因,我很不幸地未能将csv数据读入列表。我使用< code>csv模块读取数据,如下所示: 这将导致像< code>('\\U0

  • 问题内容: 我正在寻找一种将包含字符转义序列的字符串转换为表示的字符的方法。 因此,例如,我想将字符串(具有两个字符,一个反斜杠和一个双引号)解析为char 。因此,将一个字符数组转换为一个字符。 因此,可能会执行以下操作,反之亦然: 我不敢相信java.lang或其他任何东西都不能为此提供良好的代码(也许是本地代码),因为我觉得上面的代码可能不完整,并且无法解析每个有问题的(可逃避的?)字符,因