我的json中有整数,我不希望gson将它们转换成双打.以下不起作用:
@Test
public void keepsIntsAsIs(){
String json="[{\"id\":1,\"quantity\":2,\"name\":\"apple\"},{\"id\":3,\"quantity\":4,\"name\":\"orange\"}]";
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Double.class, new DoubleSerializerAsInt());
Gson gson = gsonBuilder.create();
List<Map<String, Object>> l = gson.fromJson(json, List.class);
for(Map<String, Object> item : l){
System.out.println(item);
}
}
private static class DoubleSerializerAsInt implements JsonSerializer<Double>{
@Override
public JsonElement serialize(Double aDouble, Type type, JsonSerializationContext jsonSerializationContext) {
int value = (int)Math.round(aDouble);
return new JsonPrimitive(value);
}
}
Run Code Online (Sandbox Code Playgroud)
输出不是我想要的:
{id=1.0, quantity=2.0, name=apple}
{id=3.0, quantity=4.0, name=orange}
Run Code Online (Sandbox Code Playgroud)
有没有办法在我的地图中使用整数而不是双打?
{id=1, quantity=2, name=apple}
{id=3, quantity=4, name=orange}
Run Code Online (Sandbox Code Playgroud)
编辑:并非所有字段都是整数.我相应地修改了我的例子.我在网上看了很多例子,包括这个网站上的一些答案,但在这个特殊情况下它不起作用.
我有以下JSON字符串,我发送到NodeJS服务器:
String string = "{\"id\":\"" + userID + "\",\"type\":\"" + methoden + "\",\"msg\":\"" + msget + "\", \"name\":\"" + namnet + "\", \"channel\":\"" + activeChatChannel + "\", \"visitorNick\":\"\", \"agentID\":\" " + agentID + "\"}";
PrintWriter pw = new PrintWriter(new OutputStreamWriter(os, "utf-8"));
pw.println(string);
Run Code Online (Sandbox Code Playgroud)
当字符串msget包含字符"和时,问题就变成了'
在NodeJS服务器上,我正在解析JSON,如下所示:
var obj = JSON.parse(message);
Run Code Online (Sandbox Code Playgroud)
任何想法我怎么能设法发送所有字符没有问题?
我正在使用谷歌com.google.api.client.json.GenericJson和com.fasterxml.jackson.core.JsonGenerator.我想序列化JSON对象并转义引号和反斜杠,以便我可以在Bash中传递该字符串.然后反序列化该字符串.
GenericJson.toString生成简单的JSON,但\n等等不会被转义:
{commands=ls -laF\ndu -h, id=0, timeout=0}
Run Code Online (Sandbox Code Playgroud)
有一个简单的方法如何得到这样的东西:
"{commands=\"ls -laF\\ndu -h\", id=0, timeout=0}"
Run Code Online (Sandbox Code Playgroud)
我不想重新发明轮子,所以如果可能的话,我想使用Jackson或现有的API.
这是我的JSON字符串: "{'userName' : 'Bachooo'}"
将JSON字符串转换为LoginVO逻辑是:
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
LoginVO loginFrom = gson.fromJson(jsonInString, LoginVO.class);
System.out.println("userName " + loginFrom.getUserName()); // output null
Run Code Online (Sandbox Code Playgroud)
我的LoginVO.class是:
public class LoginVO {
private String userName;
private String password;
public String getUserName()
{
return userName;
}
public void setUserName(String userName)
{
this.userName = userName;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
}
Run Code Online (Sandbox Code Playgroud)
注意我使用的是jdk 1.8.0_92
loginForm.getUserName()的输出是否有关于此问题NULL的"Bachooo"任何想法?
我正在调用 Azure 函数,并使用动态内容构建请求正文。
这就是我构建它的方式:
{
"test": "Test1",
"data": "@{activity('Upload SKU').output}"
}
Run Code Online (Sandbox Code Playgroud)
我的“数据”节点有问题。@{activity('Upload SKU').output是一个json字符串。因此动态内容会造成“混乱”。它无法逃脱它。
它创建了这个:
{
"test": "Test1",
"data": "{"a": "1"}"
}
Run Code Online (Sandbox Code Playgroud)
如何转义@{activity('Upload SKU').output以便{"a": "1"}创建{\"a\": \"1\"}以便可以将其视为字符串而不是作为 下的节点"data"。
这就是我想要实现的目标:
{
"test": "Test1",
"data": "{\"a\": \"1\"}"
}
Run Code Online (Sandbox Code Playgroud) 我想通过命令行参数将此JSON字符串传递给Java类.
{"body":"我们一定要见面,男人","startDate":"2014-05-29 11:00:00","endDate":"2014-05-29 12:00:00"," location":"Boca Raton","subject":"这是我们会议的主题."}
但是,在每个空间中,String都会被拆分.所以args [0]是
{"身体":
args [1]是
"我们
等等
我希望args [0]成为
{"body":"我们一定要见面,男人","startDate":"2014-05-29 11:00:00","endDate":"2014-05-29 12:00:00"," location":"Boca Raton","subject":"这是我们会议的主题."}
我尝试使用双引号,但由于JSON字符串中有引号,因此无效.
我怎样才能做到这一点?非常感谢!
我需要在REST OSB 12c代理的JSON内发送XML,如下所示:
{
"login": "jstein",
"identityContext": "jazn.com",
"taskId": "string",
"payload": {
"any_0": {
"any_01": "<afastamento xmlns:ns1='http: //www.tjsc.jus.br/soa/schemas/comagis/AfastamentoMagistrado' xsi:type='def: AfastamentoMagistradoType' xmlns:xsi='http: //www.w3.org/2001/XMLSchema-instance' xmlns='http: //xmlns.oracle.com/bpel/workflow/task'>
<ns1:Magistrado>719</ns1:Magistrado>
<ns1:Status>Inicial</ns1:Status>
<ns1:Vaga>8770</ns1:Vaga>
<ns1:Tipo>Licenca Nojo</ns1:Tipo>
<ns1:PeriodoReferencia/>
<ns1:DataInicialSolicitada>2015-10-10</ns1:DataInicialSolicitada>
<ns1:DataFinalSolicitada>2015-11-05</ns1:DataFinalSolicitada>
</afastamento>"
}
},
"outcome": "Start"
}
Run Code Online (Sandbox Code Playgroud)
OSB 12c发回错误给我:
Run Code Online (Sandbox Code Playgroud)"errorMessage" : "ORABPEL-15235\n\nTranslation Failure.\nFailed to translate JSON to XML. org.codehaus.jackson.JsonParseException: Illegal unquoted character ((CTRL-CHAR, code 10)): has to be escaped using backslash to be included in string value\n at [Source: java.io.BufferedReader@7db921c7; line: 7, column: 619]\nThe incoming data does not conform …
在Java中编写JSON解析器时遇到了"整容"问题:
在JSON规范中,明确指出Javascript控制字符与例如C和Java中的相同,如\n或\ t.我遇到的问题是,当JSON字符串中有控制代码时(所以在引号中:"property":"value"),然后显示的JSON代码搞砸了,因为控制字符正在改变打印,例如\n创建一个新行或\ t创建一个选项卡.
一个例子:
String s = "{\n\t\"property1\": \"The quick brown fox\njumps over the lazy dog\",\n\t\"property2\":\"value2\"\n}"
印刷为:
{
"property1": "The quick brown fox
jumps over the lazy dog",
"property2": "value2"
}
解决方案如下所示:
String s = "{\n\t\"property1\": \"The quick brown fox\\njumps over the lazy dog\",\n\t\"property2\": \"value2\"\n}"
正确打印为:
{
"property1": "The quick brown fox\njumps over the lazy dog",
"property2": "value2"
}
所以我的问题是:将字符串外的控制代码与字符串中的控制代码区别对待是否正确?而且是正确的添加范围内JSON弦乐器一个反斜杠\前的任何控制字符,创建的字符串,如"\n"或"\ t"的,不会对JSON字符串的外观有什么影响?
我试图"用\"Java 替换,但所有的斜杠都变得非常混乱."用\"Java 替换的正确方法是什么?
string.replaceAll("\"","\\"");
Run Code Online (Sandbox Code Playgroud)