diff --git a/src/main/java/com/alibaba/fastjson/parser/DefaultJSONParser.java b/src/main/java/com/alibaba/fastjson/parser/DefaultJSONParser.java index 1d37c0356..db634e561 100755 --- a/src/main/java/com/alibaba/fastjson/parser/DefaultJSONParser.java +++ b/src/main/java/com/alibaba/fastjson/parser/DefaultJSONParser.java @@ -169,7 +169,10 @@ public class DefaultJSONParser implements Closeable { try { boolean setContextFlag = false; for (;;) { - lexer.skipWhitespace(); + if (lexer.ch != '"' && lexer.ch != '}') { + lexer.skipWhitespace(); + } + char ch = lexer.ch; if ((lexer.features & Feature.AllowArbitraryCommas.mask) != 0) { while (ch == ',') { @@ -180,18 +183,33 @@ public class DefaultJSONParser implements Closeable { } boolean isObjectKey = false; + boolean strKey = false; + String keyStr = null; Object key; if (ch == '"') { - key = lexer.scanSymbol(symbolTable, '"'); - lexer.skipWhitespace(); + key = keyStr = lexer.scanSymbol(symbolTable, '"'); + strKey = true; + + if (lexer.ch != ':') { + lexer.skipWhitespace(); + } + ch = lexer.ch; if (ch != ':') { throw new JSONException("expect ':' at " + lexer.pos + ", name " + key); } } else if (ch == '}') { - lexer.next(); - lexer.resetStringPosition(); - lexer.nextToken(); + // lexer.next(); + { + int index = ++lexer.bp; + if (index >= lexer.len) { + lexer.ch = EOI; + } else { + lexer.ch = lexer.text.charAt(index); + } + } + lexer.sp = 0; // resetStringPosition + lexer.nextToken(JSONToken.COMMA); return object; } else if (ch == '\'') { if ((lexer.features & Feature.AllowSingleQuotes.mask) == 0) { @@ -199,7 +217,9 @@ public class DefaultJSONParser implements Closeable { } key = lexer.scanSymbol(symbolTable, '\''); - lexer.skipWhitespace(); + if (lexer.ch != ':') { + lexer.skipWhitespace(); + } ch = lexer.ch; if (ch != ':') { throw new JSONException("expect ':' at " + lexer.pos); @@ -209,7 +229,7 @@ public class DefaultJSONParser implements Closeable { } else if (ch == ',') { throw new JSONException("syntax error"); } else if ((ch >= '0' && ch <= '9') || ch == '-') { - lexer.resetStringPosition(); + lexer.sp = 0; // resetStringPosition lexer.scanNumber(); if (lexer.token == JSONToken.LITERAL_INT) { key = lexer.integerValue(); @@ -238,13 +258,29 @@ public class DefaultJSONParser implements Closeable { } if (!isObjectKey) { - lexer.next(); - lexer.skipWhitespace(); +// lexer.next(); + { + int index = ++lexer.bp; + if (index >= lexer.len) { + lexer.ch = EOI; + } else { + lexer.ch = lexer.text.charAt(index); + } + } + + // lexer.skipWhitespace(); + for (;;) { + if (lexer.ch == ' ' || lexer.ch == '\n' || lexer.ch == '\r' || lexer.ch == '\t' || lexer.ch == '\f' || lexer.ch == '\b') { + lexer.next(); + } else { + break; + } + } } ch = lexer.ch; - lexer.resetStringPosition(); + lexer.sp = 0; // lexer.resetStringPosition(); if (key == JSON.DEFAULT_TYPE_KEY) { String typeName = lexer.scanSymbol(symbolTable, '"'); @@ -350,8 +386,12 @@ public class DefaultJSONParser implements Closeable { setContextFlag = true; } - if (object.getClass() == JSONObject.class) { - key = (key == null) ? "null" : key.toString(); + if (object instanceof JSONObject) { + if (key == null) { + key = "null"; + } else { + key = strKey ? keyStr : key.toString(); + } } Object value; @@ -387,7 +427,7 @@ public class DefaultJSONParser implements Closeable { object.put(key, value); if (lexer.token == JSONToken.RBRACE) { - lexer.nextToken(); + lexer.nextToken(JSONToken.COMMA); return object; } else if (lexer.token == JSONToken.COMMA) { continue; @@ -395,9 +435,9 @@ public class DefaultJSONParser implements Closeable { throw new JSONException("syntax error"); } } else if (ch == '{') { // 减少嵌套,兼容android - lexer.nextToken(); + lexer.nextToken(JSONToken.LITERAL_STRING); - final boolean parentIsArray = fieldName != null && fieldName.getClass() == Integer.class; + final boolean parentIsArray = fieldName != null && fieldName instanceof Integer; JSONObject input = new JSONObject(); ParseContext ctxLocal = null; @@ -411,10 +451,10 @@ public class DefaultJSONParser implements Closeable { ctxLocal.object = object; } - checkMapResolve(object, key.toString()); + checkMapResolve(object, strKey ? keyStr : key.toString()); - if (object.getClass() == JSONObject.class) { - object.put(key.toString(), obj); + if (object instanceof JSONObject) { + object.put(strKey ? keyStr : key.toString(), obj); } else { object.put(key, obj); } @@ -424,7 +464,7 @@ public class DefaultJSONParser implements Closeable { } if (lexer.token == JSONToken.RBRACE) { - lexer.nextToken(); + lexer.nextToken(JSONToken.COMMA); setContext(context); return object; @@ -452,15 +492,34 @@ public class DefaultJSONParser implements Closeable { } } - lexer.skipWhitespace(); + if (lexer.ch != ',' && lexer.ch != '}') { + lexer.skipWhitespace(); + } + ch = lexer.ch; if (ch == ',') { - lexer.next(); +// lexer.next(); + { + int index = ++lexer.bp; + if (index >= lexer.len) { + lexer.ch = EOI; + } else { + lexer.ch = lexer.text.charAt(index); + } + } continue; } else if (ch == '}') { - lexer.next(); - lexer.resetStringPosition(); - lexer.nextToken(); + // lexer.next(); + { + int index = ++lexer.bp; + if (index >= lexer.len) { + lexer.ch = EOI; + } else { + lexer.ch = lexer.text.charAt(index); + } + } + lexer.sp = 0; // lexer.resetStringPosition(); + lexer.nextToken(JSONToken.COMMA); this.setContext(object, fieldName); diff --git a/src/main/java/com/alibaba/fastjson/parser/JSONLexer.java b/src/main/java/com/alibaba/fastjson/parser/JSONLexer.java index b403fd2dd..e18caae17 100644 --- a/src/main/java/com/alibaba/fastjson/parser/JSONLexer.java +++ b/src/main/java/com/alibaba/fastjson/parser/JSONLexer.java @@ -111,7 +111,15 @@ public final class JSONLexer { len = text.length(); bp = -1; - next(); + // next(); + { + int index = ++bp; + if (index >= len) { + ch = EOI; + } else { + ch = text.charAt(index); + } + } if (ch == 65279) { next(); } @@ -270,7 +278,15 @@ public final class JSONLexer { token = RPAREN; return; case '[': - next(); + // next(); + { + int index = ++bp; + if (index >= len) { + ch = EOI; + } else { + ch = text.charAt(index); + } + } token = LBRACKET; return; case ']': @@ -278,11 +294,27 @@ public final class JSONLexer { token = RBRACKET; return; case '{': - next(); + // next(); + { + int index = ++bp; + if (index >= len) { + ch = EOI; + } else { + ch = text.charAt(index); + } + } token = LBRACE; return; case '}': - next(); + // next(); + { + int index = ++bp; + if (index >= len) { + ch = EOI; + } else { + ch = text.charAt(index); + } + } token = RBRACE; return; case ':': @@ -317,7 +349,15 @@ public final class JSONLexer { case JSONToken.LBRACE: if (ch == '{') { token = JSONToken.LBRACE; - next(); + // next(); + { + int index = ++bp; + if (index >= len) { + ch = EOI; + } else { + ch = text.charAt(index); + } + } return; } if (ch == '[') { @@ -329,19 +369,43 @@ public final class JSONLexer { case JSONToken.COMMA: if (ch == ',') { token = JSONToken.COMMA; - next(); + // next(); + { + int index = ++bp; + if (index >= len) { + ch = EOI; + } else { + ch = text.charAt(index); + } + } return; } if (ch == '}') { token = JSONToken.RBRACE; - next(); + // next(); + { + int index = ++bp; + if (index >= len) { + ch = EOI; + } else { + ch = text.charAt(index); + } + } return; } if (ch == ']') { token = JSONToken.RBRACKET; - next(); + // next(); + { + int index = ++bp; + if (index >= len) { + ch = EOI; + } else { + ch = text.charAt(index); + } + } return; } @@ -397,7 +461,15 @@ public final class JSONLexer { if (ch == '{') { token = JSONToken.LBRACE; - next(); + // next(); + { + int index = ++bp; + if (index >= len) { + ch = EOI; + } else { + ch = text.charAt(index); + } + } return; } break; @@ -560,9 +632,8 @@ public final class JSONLexer { public final String scanSymbol(final SymbolTable symbolTable) { for (;;) { - if (ch < whitespaceFlags.length && whitespaceFlags[ch]) { + if (ch == ' ' || ch == '\n' || ch == '\r' || ch == '\t' || ch == '\f' || ch == '\b') { next(); - continue; } else { break; } @@ -612,7 +683,15 @@ public final class JSONLexer { boolean hasSpecial = false; char chLocal; for (;;) { - chLocal = next(); + // chLocal = next(); + { + int index = ++bp; + if (index >= len) { + chLocal = ch = EOI; + } else { + chLocal = ch = text.charAt(index); + } + } if (chLocal == quote) { break; @@ -772,7 +851,15 @@ public final class JSONLexer { } sp = 0; - this.next(); + // this.next(); + { + int index = ++bp; + if (index >= len) { + ch = EOI; + } else { + ch = text.charAt(index); + } + } return value; } @@ -829,7 +916,15 @@ public final class JSONLexer { hasSpecial = false; char ch; for (;;) { - ch = next(); + // ch = next(); + { + int index = ++bp; + if (index >= len) { + ch = this.ch = EOI; + } else { + ch = this.ch = text.charAt(index); + } + } if (ch == '\"') { break; @@ -856,7 +951,15 @@ public final class JSONLexer { text.getChars(np + 1, np + 1 + sp, sbuf, 0); } - ch = next(); + //ch = next(); + { + int index = ++bp; + if (index >= this.len) { + ch = this.ch = EOI; + } else { + ch = this.ch = this.text.charAt(index); + } + } switch (ch) { case '0': @@ -950,7 +1053,15 @@ public final class JSONLexer { } token = JSONToken.LITERAL_STRING; - this.ch = next(); + // this.ch = next(); + { + int index = ++bp; + if (index >= len) { + this.ch = EOI; + } else { + this.ch = text.charAt(index); + } + } } public Calendar getCalendar() { @@ -1506,9 +1617,8 @@ public final class JSONLexer { public final void skipWhitespace() { for (;;) { - if (ch < whitespaceFlags.length && whitespaceFlags[ch]) { + if (ch == ' ' || ch == '\n' || ch == '\r' || ch == '\t' || ch == '\f' || ch == '\b') { next(); - continue; } else { break; } @@ -1689,7 +1799,15 @@ public final class JSONLexer { } else { break; } - next(); + // next(); + { + int index = ++bp; + if (index >= len) { + this.ch = EOI; + } else { + this.ch = text.charAt(index); + } + } } boolean isDouble = false; @@ -1837,16 +1955,6 @@ public final class JSONLexer { return ch == ' ' || ch == '\n' || ch == '\r' || ch == '\t' || ch == '\f' || ch == '\b'; } - protected static boolean[] whitespaceFlags = new boolean[256]; - static { - whitespaceFlags[' '] = true; - whitespaceFlags['\n'] = true; - whitespaceFlags['\r'] = true; - whitespaceFlags['\t'] = true; - whitespaceFlags['\f'] = true; - whitespaceFlags['\b'] = true; - } - protected static final long MULTMIN_RADIX_TEN = Long.MIN_VALUE / 10; protected static final long N_MULTMAX_RADIX_TEN = -Long.MAX_VALUE / 10; @@ -1878,10 +1986,24 @@ public final class JSONLexer { ch = charAt(bp); if (ch == '{') { - next(); + { + int index = ++bp; + if (index >= len) { + ch = EOI; + } else { + ch = text.charAt(index); + } + } token = JSONToken.LBRACE; } else if (ch == '[') { - next(); + { + int index = ++bp; + if (index >= len) { + ch = EOI; + } else { + ch = text.charAt(index); + } + } token = JSONToken.LBRACKET; } else { nextToken(); @@ -1941,7 +2063,15 @@ public final class JSONLexer { if (chLocal == ',') { bp += (offset - 1); - this.next(); + // this.next(); + { + int index = ++bp; + if (index >= this.len) { + this.ch = EOI; + } else { + this.ch = this.text.charAt(index); + } + } matchStat = VALUE; token = JSONToken.COMMA; return value; @@ -1952,15 +2082,39 @@ public final class JSONLexer { if (chLocal == ',') { token = JSONToken.COMMA; bp += (offset - 1); - this.next(); + // this.next(); + { + int index = ++bp; + if (index >= this.len) { + this.ch = EOI; + } else { + this.ch = this.text.charAt(index); + } + } } else if (chLocal == ']') { token = JSONToken.RBRACKET; bp += (offset - 1); - this.next(); + // this.next(); + { + int index = ++bp; + if (index >= this.len) { + this.ch = EOI; + } else { + this.ch = this.text.charAt(index); + } + } } else if (chLocal == '}') { token = JSONToken.RBRACE; bp += (offset - 1); - this.next(); + // this.next(); + { + int index = ++bp; + if (index >= this.len) { + this.ch = EOI; + } else { + this.ch = this.text.charAt(index); + } + } } else if (chLocal == EOI) { token = JSONToken.EOF; bp += (offset - 1); @@ -2014,7 +2168,15 @@ public final class JSONLexer { if (chLocal == ',') { bp += (offset - 1); - this.next(); + // this.next(); + { + int index = ++bp; + if (index >= this.len) { + this.ch = EOI; + } else { + this.ch = this.text.charAt(index); + } + } matchStat = VALUE; token = JSONToken.COMMA; return value; @@ -2025,15 +2187,39 @@ public final class JSONLexer { if (chLocal == ',') { token = JSONToken.COMMA; bp += (offset - 1); - this.next(); + // this.next(); + { + int index = ++bp; + if (index >= this.len) { + this.ch = EOI; + } else { + this.ch = this.text.charAt(index); + } + } } else if (chLocal == ']') { token = JSONToken.RBRACKET; bp += (offset - 1); - this.next(); + // this.next(); + { + int index = ++bp; + if (index >= this.len) { + this.ch = EOI; + } else { + this.ch = this.text.charAt(index); + } + } } else if (chLocal == '}') { token = JSONToken.RBRACE; bp += (offset - 1); - this.next(); + // this.next(); + { + int index = ++bp; + if (index >= this.len) { + this.ch = EOI; + } else { + this.ch = this.text.charAt(index); + } + } } else if (chLocal == EOI) { token = JSONToken.EOF; bp += (offset - 1); @@ -2101,7 +2287,15 @@ public final class JSONLexer { if (chLocal == ',') { bp += (offset - 1); - this.next(); + // this.next(); + { + int index = ++bp; + if (index >= this.len) { + this.ch = EOI; + } else { + this.ch = this.text.charAt(index); + } + } matchStat = VALUE; return strVal; } @@ -2191,7 +2385,15 @@ public final class JSONLexer { chLocal = charAt(bp + offset++); if (chLocal == ',') { bp += (offset - 1); - this.next(); + // this.next(); + { + int index = ++bp; + if (index >= this.len) { + this.ch = EOI; + } else { + this.ch = this.text.charAt(index); + } + } matchStat = VALUE; token = JSONToken.COMMA; @@ -2203,15 +2405,39 @@ public final class JSONLexer { if (chLocal == ',') { token = JSONToken.COMMA; bp += (offset - 1); - this.next(); + // this.next(); + { + int index = ++bp; + if (index >= this.len) { + this.ch = EOI; + } else { + this.ch = this.text.charAt(index); + } + } } else if (chLocal == ']') { token = JSONToken.RBRACKET; bp += (offset - 1); - this.next(); + // this.next(); + { + int index = ++bp; + if (index >= this.len) { + this.ch = EOI; + } else { + this.ch = this.text.charAt(index); + } + } } else if (chLocal == '}') { token = JSONToken.RBRACE; bp += (offset - 1); - this.next(); + // this.next(); + { + int index = ++bp; + if (index >= this.len) { + this.ch = EOI; + } else { + this.ch = this.text.charAt(index); + } + } } else if (chLocal == EOI) { token = JSONToken.EOF; bp += (offset - 1); @@ -2456,7 +2682,15 @@ public final class JSONLexer { if (chLocal == ',') { bp += (offset - 1); - this.next(); + // this.next(); + { + int index = ++bp; + if (index >= this.len) { + this.ch = EOI; + } else { + this.ch = this.text.charAt(index); + } + } matchStat = VALUE; return strVal; } diff --git a/src/test/java/com/alibaba/json/bvt/android/OneFieldTest.java b/src/test/java/com/alibaba/json/bvt/android/OneFieldTest.java index d19771cb8..3b16de0a0 100644 --- a/src/test/java/com/alibaba/json/bvt/android/OneFieldTest.java +++ b/src/test/java/com/alibaba/json/bvt/android/OneFieldTest.java @@ -11,6 +11,7 @@ public class OneFieldTest extends TestCase { vo.setId(1001); String text = JSON.toJSONString(vo); + System.out.println(text); JSON.parseObject(text, VO.class); } diff --git a/src/test/java/com/alibaba/json/test/benchmark/BenchmarkMain.java b/src/test/java/com/alibaba/json/test/benchmark/BenchmarkMain.java index 1cbee431a..7508cdca8 100644 --- a/src/test/java/com/alibaba/json/test/benchmark/BenchmarkMain.java +++ b/src/test/java/com/alibaba/json/test/benchmark/BenchmarkMain.java @@ -10,7 +10,7 @@ public class BenchmarkMain { BenchmarkExecutor executor = new BenchmarkExecutor(); executor.setExecuteCount(3); - executor.getCodecList().add(new FastjsonSCodec()); + executor.getCodecList().add(new FastjsonCodec()); // executor.getCodecList().add(new FastjsonBeanToArrayCodec()); // executor.getCodecList().add(new GsonCodec()); // executor.getCodecList().add(new Jackson2Codec()); @@ -21,9 +21,9 @@ public class BenchmarkMain { executor.setLoopCount(1000 * 1); -// executor.getCaseList().add(new EishayDecodeBytes()); +// executor.getCaseList().add(new TradeObjectParse()); // executor.getCaseList().add(new EishayDecode2Bytes()); - executor.getCaseList().add(new EishayEncode()); + executor.getCaseList().add(new EishayDecode()); // executor.getCaseList().add(new EishayDecodeByClassName()); // executor.getCaseList().add(new EishayTreeDecode()); // executor.getCaseList().add(new Eishay3Encode()); diff --git a/src/test/java/com/alibaba/json/test/benchmark/decode/TradeObjectParse.java b/src/test/java/com/alibaba/json/test/benchmark/decode/TradeObjectParse.java new file mode 100644 index 000000000..e648c7d3f --- /dev/null +++ b/src/test/java/com/alibaba/json/test/benchmark/decode/TradeObjectParse.java @@ -0,0 +1,47 @@ +package com.alibaba.json.test.benchmark.decode; + +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; + +import com.alibaba.json.test.benchmark.BenchmarkCase; +import com.alibaba.json.test.codec.Codec; + +/** + * Created by wenshao on 16/4/4. + */ +public class TradeObjectParse extends BenchmarkCase { + + private String text; + + public TradeObjectParse(){ + super("TradeObjectParse"); + + // JavaBeanMapping.getGlobalInstance().putDeserializer(Image.class, new ImageDeserializer()); + // JavaBeanMapping.getGlobalInstance().putDeserializer(Media.class, new MediaDeserializer()); + } + + public void init(Codec codec) throws Exception { + InputStream is = TradeObjectParse.class.getClassLoader().getResourceAsStream("json/trade.json"); + Reader reader = new InputStreamReader(is, "UTF-8"); + char[] chars = new char[1024]; + + StringBuilder out = new StringBuilder(); + for (;;) { + int len = reader.read(chars); + if (len <= 0) { + break; + } + out.append(chars, 0, len); + } + reader.close(); + text = out.toString(); + System.out.println("tradeJsonObject " + text.substring(100)); + } + + @Override + public void execute(Codec codec) throws Exception { + codec.decode(text); + } + +} \ No newline at end of file diff --git a/src/test/resources/json/trade.json b/src/test/resources/json/trade.json new file mode 100644 index 000000000..b70b6fe9b --- /dev/null +++ b/src/test/resources/json/trade.json @@ -0,0 +1 @@ +{"bottom_bar":{"ct_default":{"children":[{"key":"bottom_bar_icon","ruleId":"wangwang"},{"key":"sys_button","ruleId":"ct_cart"},{"key":"sys_button","ruleId":"ct_buy"}]},"ct_supermarket":{"children":[{"key":"sys_button","ruleId":"ct_cartSM"}]},"ct_supermarketLF":{"children":[{"key":"ct_sys_button","ruleId":"ct_cartSM_LF"},{"key":"ct_sys_button","ruleId":"ct_buySM_LF"}]},"ct_supermarketPresale":{"children":[{"key":"ct_sys_button","ruleId":"ct_cartSM_presale"},{"key":"ct_sys_button","ruleId":"ct_buySM_presale"}]},"default":{"children":[{"key":"bottom_bar_icon","ruleId":"wangwang"},{"key":"bottom_bar_icon","ruleId":"shop"},{"key":"bottom_bar_fav"},{"key":"sys_button","ruleId":"cart"},{"key":"sys_button","ruleId":"buy"}]},"hotSpot":{"children":[{"key":"bottom_bar_icon","ruleId":"wangwang"},{"key":"bottom_bar_icon","ruleId":"shop"},{"key":"bottom_bar_fav"},{"key":"bottom_bar_hotspot"}]},"hotspot":{"children":[{"key":"bottom_bar_icon","ruleId":"wangwang"},{"key":"bottom_bar_icon","ruleId":"shop"},{"key":"bottom_bar_fav"},{"key":"bottom_bar_hotspot"}]},"jhsNotStart":{"children":[{"key":"bottom_bar_icon","ruleId":"wangwang"},{"key":"bottom_bar_icon","ruleId":"shop"},{"key":"bottom_bar_fav"},{"key":"sys_button","ruleId":"cart"},{"key":"bottom_bar_remind"}]},"jhsStart":{"children":[{"key":"bottom_bar_icon","ruleId":"wangwang"},{"key":"bottom_bar_icon","ruleId":"shop"},{"key":"bottom_bar_fav"},{"key":"sys_button","ruleId":"cart"},{"key":"sys_button","ruleId":"buyJhs"}]},"jhs_default":{"children":[{"key":"jhs_cart_button","ruleId":"jhs_cart"},{"key":"jhs_buy_button","ruleId":"buy"}]},"jhs_hotSpot":{"children":[{"key":"bottom_bar_hotspot","ruleId":"jhs_default"}]},"jhs_presale":{"children":[{"key":"jhs_cart_button","ruleId":"jhs_cart"},{"key":"bottom_bar_presale","ruleId":"jhs_default"}]},"jhs_supermarket":{"children":[{"key":"bottom_bar_sm_cart","ruleId":"jhs_default"},{"key":"sys_button","ruleId":"cartSM"}]},"ladyGoNotStart":{"children":[{"key":"bottom_bar_icon","ruleId":"wangwang"},{"key":"bottom_bar_icon","ruleId":"shop"},{"key":"bottom_bar_fav"},{"key":"sys_button","ruleId":"cart"},{"key":"bottom_bar_remind","ruleId":"tmall_ladyGo"}]},"ladyGoStart":{"children":[{"key":"bottom_bar_icon","ruleId":"wangwang"},{"key":"bottom_bar_icon","ruleId":"shop"},{"key":"bottom_bar_fav"},{"key":"sys_button","ruleId":"cart"},{"key":"sys_button","ruleId":"tmall_ladyGoBuy"}]},"presale":{"children":[{"key":"bottom_bar_icon","ruleId":"wangwang"},{"key":"bottom_bar_icon","ruleId":"shop"},{"key":"bottom_bar_fav"},{"key":"bottom_bar_presale"}]},"seckill":{"children":[{"key":"bottom_bar_seckill"}]},"supermarket":{"children":[{"key":"bottom_bar_fav"},{"key":"bottom_bar_sm_cart"},{"key":"sys_button","ruleId":"cartSM"}]},"supermarketLF":{"children":[{"key":"bottom_bar_fav"},{"key":"bottom_bar_sm_cart"},{"key":"sys_button","ruleId":"cart"},{"key":"sys_button","ruleId":"buy"}]},"supermarketPresale":{"children":[{"key":"bottom_bar_icon","ruleId":"shopSM"},{"key":"bottom_bar_fav"},{"key":"bottom_bar_presale"}]},"tmall_default":{"children":[{"key":"bottom_bar_icon","ruleId":"wangwangTmall"},{"key":"bottom_bar_icon","ruleId":"shopTmall"},{"key":"bottom_bar_fav"},{"key":"sys_button","ruleId":"cart"},{"key":"sys_button","ruleId":"buy"}]},"tmall_hotspot":{"children":[{"key":"bottom_bar_icon","ruleId":"wangwangTmall"},{"key":"bottom_bar_icon","ruleId":"shopTmall"},{"key":"bottom_bar_fav"},{"key":"bottom_bar_hotspot"}]},"tmall_jhsNotStart":{"children":[{"key":"bottom_bar_icon","ruleId":"wangwangTmall"},{"key":"bottom_bar_icon","ruleId":"shopTmall"},{"key":"bottom_bar_fav"},{"key":"sys_button","ruleId":"cart"},{"key":"bottom_bar_remind"}]},"tmall_jhsStart":{"children":[{"key":"bottom_bar_icon","ruleId":"wangwangTmall"},{"key":"bottom_bar_icon","ruleId":"shopTmall"},{"key":"bottom_bar_fav"},{"key":"sys_button","ruleId":"cart"},{"key":"sys_button","ruleId":"buyJhs"}]},"tmall_ladyGoNotStart":{"children":[{"key":"bottom_bar_icon","ruleId":"wangwangLadyGoTmall"},{"key":"bottom_bar_icon","ruleId":"shopLadyGoTmall"},{"key":"bottom_bar_fav"},{"key":"sys_button","ruleId":"cart"},{"key":"bottom_bar_remind","ruleId":"tmall_ladyGo"}]},"tmall_ladyGoStart":{"children":[{"key":"bottom_bar_icon","ruleId":"wangwangLadyGoTmall"},{"key":"bottom_bar_icon","ruleId":"shopLadyGoTmall"},{"key":"bottom_bar_fav"},{"key":"sys_button","ruleId":"cart"},{"key":"sys_button","ruleId":"tmall_ladyGoBuy"}]},"tmall_presale":{"children":[{"key":"bottom_bar_icon","ruleId":"wangwangTmall"},{"key":"bottom_bar_icon","ruleId":"shopTmall"},{"key":"bottom_bar_fav"},{"key":"bottom_bar_presale"}]},"tmall_reserve":{"children":[{"key":"bottom_bar_icon","ruleId":"wangwangTmall"},{"key":"bottom_bar_icon","ruleId":"shopTmall"},{"key":"bottom_bar_fav"},{"key":"bottom_bar_reserve"}]},"tmall_supermarket":{"children":[{"key":"bottom_bar_icon","ruleId":"shopSMTmall"},{"key":"bottom_bar_fav"},{"key":"sys_button","ruleId":"cartSM"}]},"tmall_supermarketLF":{"children":[{"key":"bottom_bar_icon","ruleId":"shopSMTmall"},{"key":"bottom_bar_fav"},{"key":"sys_button","ruleId":"cart"},{"key":"sys_button","ruleId":"buy"}]},"tmall_supermarketPresale":{"children":[{"key":"bottom_bar_icon","ruleId":"shopSMTmall"},{"key":"bottom_bar_fav"},{"key":"bottom_bar_presale"}]},"tmall_waitForStart":{"children":[{"key":"bottom_bar_icon","ruleId":"wangwangTmall"},{"key":"bottom_bar_icon","ruleId":"shopTmall"},{"key":"bottom_bar_fav"},{"key":"bottom_bar_timing_shelves"}]},"tmall_waitForStartSM":{"children":[{"key":"bottom_bar_icon","ruleId":"shopSMTmall"},{"key":"bottom_bar_fav"},{"key":"bottom_bar_timing_shelves"}]},"waitForStart":{"children":[{"key":"bottom_bar_icon","ruleId":"wangwang"},{"key":"bottom_bar_icon","ruleId":"shop"},{"key":"bottom_bar_fav"},{"key":"bottom_bar_timing_shelves"}]},"waitForStartSM":{"children":[{"key":"bottom_bar_icon","ruleId":"shopSM"},{"key":"bottom_bar_fav"},{"key":"bottom_bar_timing_shelves"}]}},"bottom_bar_fav":{"default":{"model":{"drawLine":"true","widthRatio":"0.1375"}},"fav":{"model":{"drawLine":"false","widthRatio":"0.1375"}}},"bottom_bar_hotspot":{"default":{"model":{"widthRatio":"0.5875"}},"jhs_default":{"model":{"widthRatio":"1.0"}}},"bottom_bar_icon":{"shop":{"actions":["utOpenPageShopBar","openPageShop"],"model":{"accessHint":"进入店铺","disabled":"false","drawLine":"true","icon":"삊","iconHl":"삋","text":"店铺","widthRatio":"0.1375"},"style":"shop"},"shopLadyGoTmall":{"actions":["utOpenPageShopBar","openPageLadyGoShop"],"model":{"accessHint":"进入店铺","disabled":"false","drawLine":"true","icon":"","iconHl":"","text":"店铺","widthRatio":"0.1375"},"style":"shop"},"shopSM":{"actions":["utOpenPageShopBar","openPageShopSM"],"model":{"accessHint":"进入猫超店铺","drawLine":"true","icon":"삊","iconHl":"삋","text":"进入天猫超市","widthRatio":"0.275"},"style":"shopSM"},"shopSMTmall":{"actions":["utOpenPageShopBar","openPageShopSM"],"model":{"accessHint":"进入猫超店铺","drawLine":"true","icon":"","iconHl":"","text":"进入天猫超市","widthRatio":"0.275"},"style":"shopSM"},"shopTmall":{"actions":["utOpenPageShopBar","openPageShop"],"model":{"accessHint":"进入店铺","disabled":"false","drawLine":"true","icon":"","iconHl":"","text":"店铺","widthRatio":"0.1375"},"style":"shop"},"wangwang":{"actions":["utOpenPageWangwang","openPageWangwang"],"model":{"accessHint":"联系客服","disabled":"${feature.hideWangwang}","drawLine":"false","icon":"쁪","iconHl":"쁫","text":"客服","widthRatio":"0.1375"},"style":"ww"},"wangwangLadyGoTmall":{"actions":["utOpenPageWangwang","openPageWangwangRobot"],"model":{"accessHint":"双击联系客服","disabled":"${feature.hideWangwang}","drawLine":"false","icon":"","iconHl":"","text":"客服","widthRatio":"0.1375"},"style":"ww"},"wangwangTmall":{"actions":["utOpenPageWangwang","openPageWangwang"],"model":{"accessHint":"双击联系客服","disabled":"${feature.hideWangwang}","drawLine":"false","icon":"","iconHl":"","text":"客服","widthRatio":"0.1375"},"style":"ww"}},"bottom_bar_presale":{"default":{"model":{"widthRatio":"0.5875"}},"jhs_default":{"model":{"widthRatio":"0.66"}}},"bottom_bar_remind":{"default":{"actions":["addJhsRemind"],"children":[{"key":"bottom_bar"}],"model":{"disabled":"${vertical.jhs.juCollection}","itemId":"${item.itemId}","supplement":"已设置提醒","title":"开团提醒","verticalBiz":"${vertical.jhs.verticalBiz}","widthRatio":"0.29375"}},"tmall_ladyGo":{"actions":["addLadyGoRemind"],"model":{"disabled":"false","itemId":"${item.itemId}","supplement":"已设置提醒","title":"开团提醒","verticalBiz":"${vertical.jhs.verticalBiz}","widthRatio":"0.29375"}}},"bottom_bar_reserve":{"default":{"model":{"widthRatio":"0.5875"},"style":"reserve"}},"bottom_bar_seckill":{"default":{"model":{"widthRatio":"1.0"}}},"bottom_bar_sm_cart":{"default":{"actions":["openPageSMCart","utOpenPageSMCart"],"model":{"drawLine":"true","widthRatio":"0.275"}},"jhs_default":{"actions":["openPageSMCart","utOpenPageSMCart"],"model":{"drawLine":"true","widthRatio":"0.4125"}}},"bottom_bar_timing_shelves":{"default":{"model":{"widthRatio":"0.5875"}}},"button_container":{"jhs_shopBottom":{"children":[{"key":"sys_button","ruleId":"jhs_shopRecommend"}]},"rateBottom":{"children":[{"key":"sys_button","ruleId":"gotoRate"}],"filter":"${empty rate.rateList} AND ${empty rate.keywords}"},"shopBottom":{"children":[{"key":"sys_button","ruleId":"gotoShopCategory"},{"key":"sys_button","ruleId":"gotoShop"}]}},"combo":{"default":{"filter":"${empty weappData.wapComboId01}","model":{"comboKey":"wapComboId01"}}},"ct_sys_button":{"ct_buySM_LF":{"actions":["utBuyNow","buyNow"],"model":{"defaultTitle":"立即购买","enabled":"${trade.buyEnable}","title":"${trade.buyText}","widthRatio":"0.5"},"style":"buy"},"ct_buySM_presale":{"actions":["utBuyNow","buyNow"],"model":{"defaultTitle":"立即购买","enabled":"${trade.buyEnable}","title":"${trade.buyText}","widthRatio":"0.5"},"style":"buy"},"ct_cartSM_LF":{"actions":["utAddToCart","addToCart"],"model":{"defaultTitle":"加入购物车","enabled":"${trade.cartEnable}","title":"${trade.cartText}","widthRatio":"0.5"},"style":"cart"},"ct_cartSM_presale":{"actions":["utAddToCart","addToCart"],"model":{"defaultTitle":"加入购物车","enabled":"${trade.cartEnable}","title":"${trade.cartText}","widthRatio":"0.5"},"style":"cart"}},"division":{"cainiao":{"filter":"${empty delivery.extras.PostTime}","model":{"topLine":"double","type":"blank"}},"default":{"model":{"topLine":"double","type":"blank"}},"hotActivitySM":{"model":{"title":"热门活动","topLine":"double","type":"text"},"style":"text"},"openProductDetail":{"actions":["utOpenBottomProductDetail","openBottomProductDetail"],"model":{"accessHint":"查看图文详情","title":"继续拖动,查看图文详情","topLine":"double","type":"text"},"style":"text"},"productDetailDefault":{},"productDetailEnd":{"style":"text"},"singleCenter":{"model":{"topLine":"center","type":"line"}},"singleCenterTheme":{"model":{"topLine":"center","type":"line"},"style":"theme"},"singleCenterWhiteBg":{"model":{"topLine":"center","type":"line"},"style":"whiteBg"},"singleLine":{"model":{"topLine":"full","type":"line"},"style":"tip"},"tipDivision":{"model":{"type":"blank"},"style":"tip"},"verticalDivision":{"model":{"height":6,"topLine":"vertical","type":"blank"},"style":"tip"}},"entrance":{"bigPromotion":{"actions":["openBigPromotionLink"],"filter":"${empty resource.bigPromotion} OR (${empty resource.bigPromotion.picUrl} AND ${empty resource.bigPromotion.memo})","model":{"attributedTitle":"${resource.bigPromotion.memo}","bgUrl":"${resource.bigPromotion.bgPicUrl}","logo":"${resource.bigPromotion.picUrl}"},"style":"promotion"},"brandinfo":{"filter":"${empty consumerProtection.channel.logo} AND ${empty consumerProtection.channel.title}","model":{"logo":"${consumerProtection.channel.logo}","title":"${consumerProtection.channel.title}"},"style":"brandinfo"},"cainiaoNormal":{"filter":"${empty delivery.extras.PostTime} OR ((not ${empty delivery.extras.PostTime}) AND (not ${empty delivery.extras.PostTime.link}))\n","model":{"logo":"${delivery.extras.PostTime.icon}","title":"${delivery.extras.PostTime.text}"},"style":"cainiao"},"cainiaoSpecial":{"actions":["openCainiaoLink"],"filter":"${empty delivery.extras.PostTime.link}","model":{"icon":"큚","logo":"${delivery.extras.PostTime.icon}","title":"${delivery.extras.PostTime.text}"},"style":"cainiao"},"cainiaoSpecialTmall":{"actions":["openCainiaoLink"],"filter":"${empty delivery.extras.PostTime.link}","model":{"icon":"","logo":"${delivery.extras.PostTime.icon}","title":"${delivery.extras.PostTime.text}"},"style":"cainiao"},"double11Coupon":{"actions":["openPagePlatformCoupon"],"filter":"${empty resource.entrances.coupon}","model":{"icon":"큚","logo":"${resource.entrances.coupon.icon}","subTitle":"${resource.entrances.coupon.linkText}","title":"${resource.entrances.coupon.text}"},"style":"double11Coupon"},"double11CouponTmall":{"actions":["openDouble11Coupon"],"filter":"${empty resource.entrances.double11Coupon}","model":{"icon":"","logo":"${resource.entrances.double11Coupon.icon}","subTitle":"去抢券","title":"${resource.entrances.double11Coupon.text}"},"style":"double11Coupon"},"dummyCainiaoTmall":{"filter":"(${empty delivery.extras.PostTime} OR ((not ${empty delivery.extras.PostTime}) AND (not ${empty delivery.extras.PostTime.link}))) AND ${empty delivery.extras.PostTime.link}","model":{"logoType":"3"},"style":"dummy"},"dummyTmall":{"filter":"${empty feature.hasCoupon} AND ${empty price.shopProm[0]} AND (${empty item.pointTimes} OR ${empty item.itemPoint}) AND(${empty item.itemPoint} OR ((not ${empty item.itemPoint}) AND (not ${empty item.pointTimes}))) AND ${empty resource.entrances.double11Coupon}","model":{"logoType":"3"},"style":"dummy"},"fetchCoupon":{"actions":["utShowCouponView","showCouponView"],"filter":"${empty feature.hasCoupon}","model":{"icon":"큚","logo":"券","logoType":"1","title":"领取优惠券"},"style":"fetchCoupon"},"fetchCouponNewTmall":{"actions":["utShowCouponView","showCouponView"],"filter":"${empty feature.hasCoupon}","model":{"icon":"","logo":"领券","logoType":"1","title":"点击领取优惠券"},"style":"shopPromotionTmall"},"fetchCouponTmall":{"actions":["utShowCouponView","showCouponView"],"filter":"${empty feature.hasCoupon}","model":{"icon":"","logo":"券","logoType":"1","title":"领取优惠券 "},"style":"fetchCoupon"},"fullBack":{"actions":["utOpenPageFullBack","openPageFullBack"],"filter":"${empty resource.entrances.fullBackBonus}","model":{"icon":"큚","logo":"${resource.entrances.fullBackBonus.icon}","subTitle":"看规则","title":"${resource.entrances.fullBackBonus.text}"},"style":"fetchCoupon"},"interSizingChart":{"actions":["showInterSizingChart"],"filter":"${empty vertical.inter.sizeCartUrl}","model":{"icon":"큚","title":"国际尺码对照表"},"style":"interSizingChart"},"interSizingChartTmall":{"actions":["showInterSizingChart"],"filter":"${empty vertical.inter.sizeCartUrl}","model":{"icon":"","title":"国际尺码对照表"},"style":"interSizingChart"},"interTip":{"filter":"${empty vertical.inter}","model":{"logo":"${vertical.inter.nationalIcon}","title":"${vertical.inter.fromName}"},"style":"inter"},"interTipMxsTmall":{"filter":"${empty vertical.freshFood} OR ${empty item.subtitle}","model":{"logo":"${vertical.freshFood.nationalFlag}","title":"${item.subtitle}"},"style":"mxsTitle"},"jump_h5_tmall":{"actions":["openDetailH5Page4Test"],"model":{"icon":"","subTitle":"跳转至H5","title":"${item.itemId}"}},"productParam":{"actions":["openProduct"],"filter":"${empty propsNode} AND ${empty propsNode.propList}","model":{"icon":"큚","title":"产品参数"},"style":"productParam"},"productParamTmall":{"actions":["openProduct"],"filter":"${empty props.groupProps}","model":{"icon":"","title":"产品参数"},"style":"interSizingChart"},"questionAll":{"actions":["utOpenPageAskAll","openPageAskAll"],"filter":"${empty vertical.askAll.askText}","model":{"icon":"큚","logo":"${vertical.askAll.askIcon}","title":"${vertical.askAll.askText}"},"style":"questionAll"},"shopPromotionTmall":{"actions":["openSalePromotion"],"filter":"${empty price.shopProm[0]}","model":{"icon":"","logo":"促销","logoType":"1","title":"${price.shopProm[0].content[0]}"},"style":"shopPromotionTmall"},"sizingChartTmall":{"actions":["showSizingChart"],"filter":"${empty resource.entrances.sizeCalculator}","model":{"icon":"","title":"尺码助手"},"style":"interSizingChart"},"threeDTmall":{"actions":["openThreeD"],"filter":"${empty resource.entrances.threeD.text}","model":{"icon":"","title":"${resource.entrances.threeD.text}"},"style":"interSizingChart"},"tmallCouponTmall":{"actions":["openTmallCoupon"],"filter":"${empty resource.entrances.tmallCoupon}","model":{"icon":"","logo":"${resource.entrances.tmallCoupon.icon}","subTitle":"${resource.entrances.tmallCoupon.linkText}","title":"${resource.entrances.tmallCoupon.text}"},"style":"double11Coupon"},"tmallPointTmall":{"filter":"${empty item.itemPoint} OR ((not ${empty item.itemPoint}) AND (not ${empty item.pointTimes}))","model":{"logo":"积分","logoType":"1","title":"购买可得${item.itemPoint}积分"},"style":"shopPromotionTmall"},"tmallPointWithTimeTmall":{"filter":"${empty item.pointTimes} OR ${empty item.itemPoint}","model":{"logo":"积分","logoType":"1","title":"购买可得${item.pointTimes}倍,共${item.itemPoint}积分"},"style":"shopPromotionTmall"}},"h5":{"offsale":{"model":{"url":"http://h5.m.taobao.com/detailplugin/offsale.html","urlParams":{"isOffShelf":"true","isSuperAct":"${feature.superActTime}","itemId":"${item.itemId}","sellerId":"${seller.userId}"}}}},"hot_activity_chaoshi":{"default":{"filter":"${empty vertical.supermarket}"}},"image_bar":{"default":{"filter":"${empty resource.entrances.double11Banner.icon}","model":{"picUrl":"${resource.entrances.double11Banner.icon}"}}},"jhs_buy_button":{"buy":{"actions":["utBuyNow","buyNow"],"model":{"defaultTitle":"立即购买","enabled":"${trade.buyEnable}","title":"${trade.buyText}","widthRatio":"0.66"}},"supermarketLF":{"actions":["utBuyNow","buyNow"],"model":{"defaultTitle":"立即购买","enabled":"${trade.buyEnable}","title":"${trade.buyText}","widthRatio":"0.5"}}},"jhs_cart_button":{"jhs_cart":{"actions":["utAddToCart","addToCart"],"model":{"defaultTitle":"加入购物车","enabled":"${extendData.canAddCart}","title":"${trade.cartText}","widthRatio":"0.34"}}},"navi_bar":{"ct":{"children":[{"key":"navi_item","ruleId":"back"},{"key":"navi_item","ruleId":"center"},{"key":"navi_item","ruleId":"ct_cart"}]},"default":{"children":[{"key":"navi_item","ruleId":"back"},{"key":"navi_item","ruleId":"center"},{"key":"navi_item","ruleId":"cart"},{"key":"navi_item","ruleId":"more"}]},"supermarket":{"children":[{"key":"navi_item","ruleId":"back"},{"key":"navi_item","ruleId":"center"},{"key":"navi_item","ruleId":"search"},{"key":"navi_item","ruleId":"more"}]}},"navi_item":{"back":{"actions":["openPagePreview"],"model":{"accessHint":"返回上一页","positionKey":"left","title":"ꁺ","titleSizeRatio":"0.375"}},"cart":{"actions":["utGotoCart","openPageCart"],"model":{"accessHint":"进入购物车","positionKey":"custom","title":"ꁊ","titleSizeRatio":"0.35"}},"center":{"model":{"positionKey":"center","title":"","titleSizeRatio":"0.375","type":"2"}},"ct_cart":{"actions":["utGotoCart","openPageCart"],"model":{"positionKey":"right","title":"ꁊ","titleSizeRatio":"0.35"}},"more":{"actions":["showMenu"],"children":[{"key":"sys_button","ruleId":"msgCenter"},{"key":"sys_button","ruleId":"homePage"},{"key":"sys_button","ruleId":"service"},{"key":"sys_button","ruleId":"share"}],"model":{"accessHint":"查看更多菜单","positionKey":"right","title":"ꁪ","titleSizeRatio":"0.375"}},"search":{"actions":["utOpenPageSearchSM","openPageSearchSM"],"model":{"accessHint":"进入搜索","positionKey":"custom","title":"끺","titleSizeRatio":"0.35"}}},"o2o":{"default":{"filter":"${empty weappData.wapO2O01}"}},"pic_gallery":{"default":{},"tmall_small_gallery":{"model":{"heightRatio":"0.33"}}},"price":{},"price_cnquality":{},"price_jhs":{"default":{},"jhsOnSellTmall":{"style":"jhsOnSell"},"tmall_ladyGoNotStart":{"style":"ladyGoNotStart"},"tmall_ladyGoStarted":{"style":"ladyGoStarted"}},"price_qianggou":{},"price_tags":{},"rate_header":{},"rate_single":{},"rate_tags":{},"recommend_chaoshi":{"default":{"filter":"${empty vertical.supermarket}"}},"rights":{},"shop_header":{"default":{"actions":["utOpenPageShop","openPageShop"]},"jhs_default":{},"ladyGo_default":{"actions":["utOpenPageShopBar","openPageLadyGoShop"]}},"shop_info":{"default":{"children":[{"key":"shop_info_item","ruleId":"allItem"},{"key":"shop_info_item","ruleId":"newItem"},{"key":"shop_info_item","ruleId":"fans"}]}},"shop_info_item":{"allItem":{"actions":["utOpenPageShopAllItem","openPageShopAllItem"],"filter":"${empty seller.allItemCount}","model":{"subTitle":"${seller.allItemCount}","title":"全部宝贝","transferToShort":"true"}},"ct_allItem":{"model":{"subTitle":"${seller.allItemCount}","title":"全部宝贝","transferToShort":"true"}},"ct_fans":{"model":{"subTitle":"${seller.fans}","title":"关注人数"}},"ct_newItem":{"filter":"${empty seller.newItemCount}","model":{"subTitle":"${seller.newItemCount}","title":"上新宝贝"}},"fans":{"model":{"subTitle":"${seller.fans}","title":"关注人数"}},"newItem":{"actions":["utOpenPageShopNewItem","openPageShopNewItem"],"filter":"${empty seller.newItemCount}","model":{"subTitle":"${seller.newItemCount}","title":"上新宝贝"}}},"shop_promotion":{},"sku":{},"subinfo":{"default":{"filter":"${empty delivery.postage} AND ${empty item.sellCount} AND ${empty delivery.from}","model":{"infoList":["${delivery.postage}","月销${deleteIfNull item.sellCount}笔","${delivery.from}"]}},"inter":{"filter":"${empty vertical.inter.tariff.name} AND ${empty vertical.inter.tariff.value} AND ${empty item.sellCount}","model":{"infoList":["${vertical.inter.tariff.name} ${vertical.inter.tariff.value}","月销${deleteIfNull item.sellCount}笔"]}},"jhs":{"filter":"${empty delivery.postage} AND ${empty delivery.from}","model":{"infoList":["${delivery.postage}","${delivery.from}"]}},"supermarket":{"filter":"${empty delivery.postage} AND ${empty item.sellCount} AND ${empty vertical.supermarket.weight}","model":{"infoList":["重量${vertical.supermarket.weight}","${delivery.postage}","月销${deleteIfNull item.sellCount}笔"]}}},"sys_button":{"buy":{"actions":["utBuyNow","buyNow"],"model":{"defaultTitle":"立即购买","enabled":"${trade.buyEnable}","title":"${trade.buyText}","widthRatio":"0.29375"},"style":"buy"},"buyJhs":{"actions":["utBuyNow","buyNow"],"model":{"defaultTitle":"立即购买","enabled":"${trade.buyEnable}","title":"${trade.buyText}","widthRatio":"0.29375"},"style":"buyJhs${vertical.jhs.verticalBiz}"},"cart":{"actions":["utAddToCart","addToCart"],"model":{"defaultTitle":"加入购物车","enabled":"${trade.cartEnable}","title":"${trade.cartText}","widthRatio":"0.29375"},"style":"cart"},"cartSM":{"actions":["utAddToCart","addToCart"],"model":{"defaultTitle":"加入购物车","enabled":"${trade.cartEnable}","title":"${trade.cartText}","widthRatio":"0.5875"},"style":"cart"},"ct_buy":{"actions":["utBuyNow","buyNow"],"model":{"defaultTitle":"立即购买","enabled":"${trade.buyEnable}","title":"${trade.buyText}","widthRatio":"0.43125"},"style":"buy"},"ct_cart":{"actions":["utAddToCart","addToCart"],"model":{"defaultTitle":"加入购物车","enabled":"${trade.cartEnable}","title":"${trade.cartText}","widthRatio":"0.43125"},"style":"cart"},"ct_cartSM":{"actions":["utAddToCart","addToCart"],"model":{"defaultTitle":"加入购物车","enabled":"${trade.cartEnable}","title":"${trade.cartText}","widthRatio":"1"},"style":"cart"},"ct_cartSM_presale":{"actions":["utAddToCart","addToCart"],"model":{"defaultTitle":"加入购物车","enabled":"${trade.cartEnable}","title":"${trade.cartText}","widthRatio":"0.5"},"style":"cart"},"gotoRate":{"actions":["utOpenPageRate","openPageRate"],"model":{"enabled":"true","title":"查看全部评价"},"style":"rate"},"gotoShop":{"actions":["utOpenPageShopButton","openPageShop"],"model":{"enabled":"true","title":"进店逛逛"},"style":"shop"},"gotoShopCategory":{"actions":["utOpenPageShopCategory","openPageShopCategory"],"model":{"enabled":"true","title":"查看分类"},"style":"shop"},"homePage":{"actions":["utOpenPageHome","openPageHome"],"model":{"title":"ꀚ 首页"},"style":"menu"},"jhs_cart":{"actions":["utAddToCart","addToCart"],"model":{"defaultTitle":"加入购物车","enabled":"${extendData.canAddCart}","title":"${trade.cartText}","widthRatio":"0.34"},"style":"jhs_cart"},"jhs_shopRecommend":{"actions":["jhsOpenShopRecommend"],"filter":"${extendData.sellerItemCount} < 2","model":{"enabled":"true","title":"同店推荐"},"style":"shop"},"msgCenter":{"actions":["utOpenPageMsgCenter","openPageMsgCenter"],"model":{"receiveMsg":"true","title":"ꂊ 消息"},"style":"menu"},"reserve":{"model":{"widthRatio":"0.5875"},"style":"reserve"},"service":{"actions":["utOpenPageService","openPageService"],"model":{"title":"떊 帮助"},"style":"menu"},"share":{"actions":["utShowShare","showShare"],"model":{"title":"ꄪ 分享"},"style":"menu"},"tmall_ladyGoBuy":{"actions":["utBuyNow","buyNow"],"model":{"defaultTitle":"立即购买","enabled":"${trade.buyEnable}","title":"${trade.buyText}","widthRatio":"0.29375"},"style":"buyJhs0"}},"sys_list":{},"timelimit_activity_chaoshi":{"default":{"filter":"${empty vertical.supermarket}"}},"tip":{"delivery":{"filter":"${empty vertical.inter.delivery}","model":{"text":"${vertical.inter.delivery}"}},"jyj":{"filter":"${empty vertical.jyj.logoText}","model":{"text":"${vertical.jyj.logoText}"},"style":"jyj"},"postTime":{"filter":"${empty delivery.extras.PostTime.text}","model":{"text":"${delivery.extras.PostTime.text}"}},"presale":{"filter":"${empty vertical.presale.tip}","model":{"text":"${vertical.presale.tip}"}},"priceTip":{"filter":"${empty price.priceTip}","model":{"text":"${price.priceTip}"},"style":"price"},"tmallLadyGoTitle":{"filter":"${empty vertical.ladyGo.brandSupply}","model":{"text":"${vertical.ladyGo.brandSupply}"},"style":"ladyGoTitle"},"tmallSellPoint":{"filter":"${empty item.attraction50}","model":{"text":"${item.attraction50}"},"style":"sellPoint"}},"title":{"ct":{"model":{"isAskAll":"false","logo":"${item.titleIcon}","title":"${item.title}"}},"default":{},"questionAll":{"actions":["utOpenPageAskAll","openPageAskAll"],"filter":"${empty vertical.askAll.answerText}","model":{"isAskAll":"true","logo":"${vertical.askAll.answerIcon}","title":"${vertical.askAll.answerText}"},"style":"questionAll"}},"title_share":{}} \ No newline at end of file