Java 如何为下面的给定字符串使用string.format?
如何为下面给定的字符串使用string.format?我希望json值是动态的,以便以字符串形式获取值并对其进行格式化Java 如何为下面的给定字符串使用string.format?,java,string,Java,String,如何为下面给定的字符串使用string.format?我希望json值是动态的,以便以字符串形式获取值并对其进行格式化 String json = "{ \"asin\":\"" + rs.getString("asin") + "\", \"appdetails\": { \"asintype\":\"" + rs.getString("asintype") + "\",\"app_name\":\"" + rs.getString("appname") + "\",
String json = "{ \"asin\":\"" + rs.getString("asin") + "\", \"appdetails\": { \"asintype\":\""
+ rs.getString("asintype") + "\",\"app_name\":\"" + rs.getString("appname") + "\", \"app_username\":\""
+ rs.getString("appusername") + "\",\"app_password\":\"" + rs.getString("password")
+ "\",\"service_provider_uname\":\"" + rs.getString("serviceid") + "\",\"service_provider_password\":\""
+ rs.getString("providepassword") + "\",\"marketplace\":\"" + rs.getString("marketplace")
+ "\" , \"accountname\":\"" + deviceDataRS.getString("accountname") + "\", \"deviceusername\":\""
+ deviceDataRS.getString("deviceusername") + "\", \"devicepassword\":\""
+ deviceDataRS.getString("devicepassword") + "\", \"networkname\":\""
+ deviceDataRS.getString("networkname") + "\", \"networkpassword\":\""
+ deviceDataRS.getString("networkpassword") + "\"} }";
虽然使用
String.format()
当然可以编写JSON,但编写JSON是一项非常常见的操作,有许多库可以为您处理它。这是比较可取的,因为当您自己做这件事时,很容易出错,尤其是以后,当您有一段时间没有接触项目并且更改了代码时
考虑使用像Jackson这样的库。您可以从包含所有数据的对象开始
class Data {
public String asin;
public String asintype;
public String appname;
// ...
}
然后可以将对象“封送”为JSON:
Data data = new Data();
data.asin = "foo";
data.asintype = "bar";
data.appname = "baz";
// Jackson JSON object mapper
ObjectMapper mapper = new ObjectMapper();
// write to file
mapper.writeValue("c:\\data.json", data);
// write to string
String str = mapper.writeValueAsString(data);
System.out.println(str);
Mkyong有一个更详细的例子来说明这一点
使用String.format()
可以执行以下操作:
String.format("{\"asin\":\"%s\",\"asintype\":\"%s\"}", data.asin, data.asintype);
我希望您能看到,对于一个大型对象,这将变得多么复杂,在转义引号和维护正确的JSON结构时,您必须多么小心。这是一种痛苦。别这样 几年前,我也有同样的要求,当时我必须使用从
数据库获取的ResultSet
值形成一个JSON as字符串,而不创建任何POJO
类或对象到JSON的转换
依赖项。然后我使用了一个很棒的apachecommons库,名为Commons text
,并使用该库中的类替换字符串中的动态占位符值。可以按如下方式将库添加到项目中:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.8</version>
</dependency>
org.apache.commons
公共文本
1.8
下面的代码片段是在字符串中动态替换占位符值所需的全部内容
String json = "{ \"asin\":\"<asin>\", \"appdetails\": { \"asintype\":\"<asintype>\"," +
"\"app_name\":\"<appname>\", \"app_username\":\"<appusername>\",\"app_password\":\"<password>\"," +
"\"service_provider_uname\":\"<serviceid>\",\"service_provider_password\": \"<providepassword>\"," +
"\"marketplace\":\"<marketplace>\", \"accountname\":\"<accountname>\", " +
"\"deviceusername\":\"<deviceusername>\", \"devicepassword\":\"<devicepassword>\", " +
"\"networkname\":\"<networkname>\", \"networkpassword\":\"<networkpassword>\"}}";
Map<String, String> values = new HashMap<>();
values.put("asin", rs.getString("asin"));
values.put("appdetails", rs.getString("appdetails"));
values.put("asintype", rs.getString("asintype"));
values.put("appname", rs.getString("appname"));
values.put("appusername", rs.getString("appusername"));
values.put("password", rs.getString("password"));
values.put("serviceid", rs.getString("serviceid"));
values.put("providepassword", rs.getString("providepassword"));
values.put("marketplace", rs.getString("marketplace"));
values.put("accountname", deviceDataRS.getString("accountname"));
values.put("deviceusername", deviceDataRS.getString("deviceusername"));
values.put("devicepassword", deviceDataRS.getString("devicepassword"));
values.put("networkname", deviceDataRS.getString("networkname"));
values.put("networkpassword", deviceDataRS.getString("networkpassword"));
String finalJson = StringSubstitutor.replace(json, values, "<", ">");
String json=“{\'asin\”:\“\”,\'appdetails\:{\'asintype\”:\“\”,”+
“\”应用程序名称\“:\”,\”应用程序用户名\“:\”,\”应用程序密码\“:\”,”+
“\”服务提供商\取消名称\“:\”,“\”服务提供商\密码\“:\”,”+
“\”市场\“:\”,“\”帐户名\“:\”,”+
“\”设备用户名\“:\”,“\”设备密码\“:\”,”+
“\”网络名称\“:\”,“\”网络密码\“:\”\“}}”;
映射值=新的HashMap();
value.put(“asin”,rs.getString(“asin”);
value.put(“appdetails”,rs.getString(“appdetails”);
value.put(“asintype”,rs.getString(“asintype”);
value.put(“appname”,rs.getString(“appname”);
value.put(“appusername”,rs.getString(“appusername”);
value.put(“密码”,rs.getString(“密码”);
value.put(“serviceid”,rs.getString(“serviceid”);
value.put(“providepassword”,rs.getString(“providepassword”);
value.put(“市场”,rs.getString(“市场”);
value.put(“accountname”,deviceDataRS.getString(“accountname”);
value.put(“deviceusername”,deviceDataRS.getString(“deviceusername”);
value.put(“devicepassword”,deviceDataRS.getString(“devicepassword”);
value.put(“networkname”,devicedata.getString(“networkname”);
value.put(“networkpassword”,deviceDataRS.getString(“networkpassword”);
String finalJson=StringSubstitutor.replace(json,value,“”);
<代码>请考虑这不是一个独特的问题;这很常见,你永远不需要显式地创建这个字符串…哦,那么怎么做,你能帮我举个例子吗?@user3782636请检查我的答案