Java 如何为下面的给定字符串使用string.format?

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.format?我希望json值是动态的,以便以字符串形式获取值并对其进行格式化

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请检查我的答案